Private exec

This PR addresses the same issue brought up in https://github.com/puppetlabs/puppetlabs-rsync/pull/45 and then some.

It also uses more functions to do input validation for `rsync::get` and `rsync::put` as well as makes a private type, `rsync::exec` that *put* and *get* are essentially wrapper for.

Rsync can also work with `rsync://` protocol, too.  So we should support that.  As the spec tests will now show, it also separates `$keyfile` and `$user`, since SSH does a better job of hunting for a user's key than a fixed, Linux-specific path as the default and we do not need to set *rsh* when using the *rsync* protocol.