##### 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`
SUPPORTED_SCMS = set(['git', 'hg'])
    META_MAIN = (os.path.join('meta', 'main.yml'), os.path.join('meta', 'main.yaml'))
    META_INSTALL = os.path.join('meta', '.galaxy_install_info')
    META_REQUIREMENTS = (os.path.join('meta', 'requirements.yml'), os.path.join('meta', 'requirements.yaml'))
    ROLE_DIRS = ('defaults', 'files', 'handlers', 'meta', 'tasks', 'templates', 'vars', 'tests')
    def __init__(self, galaxy, api, name, src=None, version=None, scm=None, path=None):