Re-add Synchronize (rsync) module (with improvements)

There has been a discussion of the ansible group about problems with the synchronize module which was removed.

https://groups.google.com/d/msg/ansible-project/DTIjx8aAo_4/wTVHAiOAwhYJ

The first commit restores the code from the initial pull request: https://github.com/ansible/ansible/pull/3173

The second commit includes my changes which:

* Attempt to fix the issues in the linked topic: Namely it doesn't work well on the localhost. The reason for this is that in the setup function it was force adding the delegate_to option but was not setting the transport method. This meant that ansible tried to ssh into localhost, which may work on some systems, but for many it doesn't. I used inject['ansible_connection'] = 'local'  to remedy this situation.
* Improved the src and dest handling, and introduced a mode variable for the class. This attempts to determine the mode that the action is being run in. It even takes care of using sudo.
    * The default is remote mode, and operates like copy action, where the src is a local filepath and dest is a remote filepath (if no hosts are specified).
    * If run using local_action or delegate_to is set to 127.0.0.1, then this is local mode. If no hosts are set in src and dest parameters then local filepaths are assumed.
    * If delegate_to is another host, then other mode is used, which uses filepaths on the specified host.

* Added a whole load of extra parameters based on rsync flags, and changed the default behaviour of using the -archive flag, which i found inconvenient as it keeps the owners of files the same as on the local system which if that user doesn't exist on the host then its not ideal. 

* Added change detection - now the response is parsed to determine whether there were any changes or not. Also added dry_run parameter which can be combined with change detection to test first whether there are changes.

I've been testing this for a few days, but would really welcome some further testing.