##### SUMMARY
ansible-galaxy install throws UnicodeDecodeError exception when filenames have special characters on Python 2.7

```
 Traceback (most recent call last):
  File "/bin/ansible-galaxy", line 123, in <module>
    exit_code = cli.run()
  File "/usr/lib/python2.7/site-packages/ansible/cli/galaxy.py", line 370, in run
    context.CLIARGS['func']()
  File "/usr/lib/python2.7/site-packages/ansible/cli/galaxy.py", line 880, in execute_install
    installed = role.install()
  File "/usr/lib/python2.7/site-packages/ansible/galaxy/role.py", line 319, in install
    role_tar_file.extract(member, self.path)
  File "/usr/lib64/python2.7/tarfile.py", line 2084, in extract
    self._extract_member(tarinfo, os.path.join(path, tarinfo.name))
  File "/usr/lib64/python2.7/posixpath.py", line 80, in join
    path += '/' + b
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 11: ordinal not in range(128)
```
##### ISSUE TYPE
- Bug Report

##### COMPONENT NAME
* ansible-galaxy
* Python 2.7

##### ANSIBLE VERSION
<!--- Paste verbatim output from "ansible --version" between quotes -->
```paste below
ansible 2.9.7
```

##### OS / ENVIRONMENT
* Red Hat Enteprise Linux 7
* Python 2.7 *only*

##### STEPS TO REPRODUCE

**This issue only happens on Python 2.7**

1. Create a simple role
2. On that role, include some files that with a special character on its name. For example: `anotações-remove.txt`.
3. Run the `asible-galaxy install` command
4. It will throw the `UnicodeDecodeError`. 


##### EXPECTED RESULTS
`ansible-galaxy` should be able to handle filenames with special characters

##### ACTUAL RESULTS
<!--- Describe what actually happened. If possible run with extra verbosity (-vvvv) -->

<!--- Paste verbatim command output between quotes -->
**strace**
```paste below
stat("/usr/lib64/python2.7/posixpath.py", {st_mode=S_IFREG|0644, st_size=13591, ...}) = 0
open("/usr/lib64/python2.7/posixpath.py", O_RDONLY) = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=13591, ...}) = 0
fstat(3, {st_mode=S_IFREG|0644, st_size=13591, ...}) = 0
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x7fcea6a2d000
read(3, "\"\"\"Common operations on Posix pa"..., 8192) = 8192
read(3, "See also module 'glob' for expan"..., 4096) = 4096
read(3, "th):\n            path = newpath\n"..., 4096) = 1303
read(3, "", 4096)                       = 0
close(3)                                = 0
munmap(0x7fcea6a2d000, 4096)            = 0
write(1, "the full traceback was:\n\nTraceba"..., 819the full traceback was:

Traceback (most recent call last):
  File "/bin/ansible-galaxy", line 123, in <module>
    exit_code = cli.run()
  File "/usr/lib/python2.7/site-packages/ansible/cli/galaxy.py", line 370, in run
    context.CLIARGS['func']()
  File "/usr/lib/python2.7/site-packages/ansible/cli/galaxy.py", line 880, in execute_install
    installed = role.install()
  File "/usr/lib/python2.7/site-packages/ansible/galaxy/role.py", line 319, in install
    role_tar_file.extract(member, self.path)
  File "/usr/lib64/python2.7/tarfile.py", line 2084, in extract
    self._extract_member(tarinfo, os.path.join(path, tarinfo.name))
  File "/usr/lib64/python2.7/posixpath.py", line 80, in join
    path += '/' + b
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 11: ordinal not in range(128)
```
**added `remote_pdb` to the execution to track the filename**

```
                        for member in members:
                            # we only extract files, and remove any relative path
                            # bits that might be in the file for security purposes
                            # and drop any containing directory, as mentioned above
                            if member.isreg() or member.issym():
                                parts = member.name.replace(archive_parent_dir, "", 1).split(os.sep)
                                final_parts = []
                                for part in parts:
                                    if part != '..' and '~' not in part and '$' not in part:
                                        final_parts.append(part)
                                member.name = os.path.join(*final_parts)
                                if member.name == 'ansible-postinstall-chef-client/misc/config_chef.sh':
                                     from remote_pdb import RemotePdb
                                     RemotePdb('127.0.0.1', 4444).set_trace()
                                role_tar_file.extract(member, self.path)
```

Then at the `pdb` console, we can see:

```
(Pdb) member
<TarInfo 'ansible-postinstall-chef-client/misc/config_chef.sh' at 0x7f2467a606d0>
(Pdb) self.path
u'/var/lib/awx/projects/_266__project_postinstall_rhel/roles/requirements_roles/ansible-postinstall-chef-client'
(Pdb) role_tar_file.extract(member, self.path)
(Pdb) member.name
'ansible-postinstall-chef-client/misc/config_chef.sh'
(Pdb) n
(Pdb) member.name
'misc/anota\xc3\xa7\xc3\xb5es-remove.txt'
(Pdb) str(member.name)
'misc/anota\xc3\xa7\xc3\xb5es-remove.txt'
(Pdb) role_tar_file.extract(member, self.path)
*** UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 11: ordinal not in range(128)
```
The original filename was `anotações-remove.txt`
#
#
#
#
#
#
from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
import errno
import datetime
import os
import tarfile
import tempfile
import yaml
from distutils.version import LooseVersion
from shutil import rmtree
from ansible import context
from ansible.errors import AnsibleError
from ansible.galaxy.user_agent import user_agent
from ansible.module_utils._text import to_native, to_text
from ansible.module_utils.urls import open_url
from ansible.playbook.role.requirement import RoleRequirement
from ansible.utils.display import Display
display = Display()
class GalaxyRole(object):