Implemented follow-symlinks feature for S3.

Added unit and integration tests along with PEP8 reformatting for
the entire file.

Fixes:
#453
#781
This is an interesting case.  I would expect that if a user asks us to follow symlinks and we encounter a symlink that's bad, we should be warning the user about this and return with a non-zero RC because not everything the customer asked for was synced.

In the simplest scenario, trying to copy a single file bad symlink seems counterintuitive:

```
$ ln -s /tmp/does/not/exist bad-symlink

# It gives the appearance that it works:
$ aws s3 cp bad-symlink s3://<bucket>/bad-symlink/
$ echo $?
0
# But it's not actually there.
$ aws s3 ls s3://<bucket>/bad-symlink
```

What do you think?