Many changes for improved flexibility

This patch series is a collection of functionality enhancements, bug
fixes, and refactorings.  The highlights are:

* `--delete` is now optional.
* Arbitrary arguments can be passed to rsync.
* File removal is handled separately via run_on_removals
* The `:excludes` option is now an Array of Strings, not a
  Hash of Regexps.  This is a backwards-incompatible change;
  however it should be possible to reintroduce support for
  Hashes prior to the next release.

This allows new use cases, in particular where multiple source trees
are rsync'd to a single merged destination tree, e.g.:

  https://github.com/crowbar/crowbar/pull/1795

Previously the presence of --delete would have meant that any change
in one of the source trees would cause files from all the other trees
to get wiped from the destination.