Add support for `clean` option

This adds support for a `clean` method/property, which receives a boolean
indicating whether to remove the destination directory before writing.
The default is `true` (consistent with previous behavior).

Setting this to `false` can allow for use in situations where the source
directory is a child of the destination directory, e.g. for gh-pages setups
where the source is contained within the same repository.  Note that
moved/removed files will need to be cleaned up by other means.