don't propagate Guard.listener.ignore_paths to rsync excludes file

guard/guard@306bd4de deprecated the 'ignore_paths' directive
previously available in the Guardfile DSL, in favour of new 'ignore'
and 'filter' directives which accept regexp parameters:

    https://github.com/guard/guard/commit/306bd4de

This means it is no longer practical to propagate the values to
rsync's exclude file, because there is no easy way to convert from
regexps to exclude patterns.  Even if there was, it would not be
correct to do it, because `ignore` regexps are intended to control the
guard listener, which is orthogonal to the expected behaviour of the
rsync invocation.
only iterate over changed files, not whole tree
fix indentation
invoke rsync via open3

This allows the rsync command to be forked without any quoting issues
which arise through the existence of an intermediate shell process.
make --delete optional