Added custom sync strategy

Allows developers to easily write custom sync strategies for ``s3 sync``
command.
Add more customizations to sync strategies

Allow developers to make strategies for when files do not exist at the
source or when files do not exist in the destination.
Made seperate directory for  sync strategies
Cleaned up the custom sync strategy code
Renamed sync strategy class names.
Update tests based on feedback
Merge pull request #930 from kyleknap/custom-sync

Allow for easy creation of custom sync strategies