generators: Teach Generator.get_files to handle non-directory input

This makes it easier for StaticGenerator to walk FILES_TO_COPY, where
the input may be a directory or a bare filename.

Non-traversable file types (e.g. everything but directories and
symlinks to directories) are not checked against the exclude list.
The user-level effect of this is that explicit entries in STATIC_PATHS
or FILES_TO_COPY will override a hypothetical STATIC_EXCLUDES setting,
which seems like a reasonable approach.
generators: Teach StaticGenerator to walk FILES_TO_COPY

This allows you to copy directories (instead of just files) using
FILES_TO_COPY, and brings us into compliance with docs/settings.rst:

  `FILES_TO_COPY` (``()``)
  A list of files (or directories) to copy from the source...

For example, with and otherwise default configuration plus:

  FILES_TO_COPY = [('source', 'target')]

content/source/some-file will be copied to output/target/some-file.
samples: Add example directory copy with FILES_TO_COPY
WIP: consolidate duplicate detection, blocking on #667