Add a new stream class: WatchedFileStream.

- This stream class emulates the behavior of Python's WatchedFileHandler
logger utility, where if the log file is removed/renamed by an
external log rotation utility, the file will be reopened. This is very
useful for situations where circus is running a bunch of different
processes with different logging implementations and one external log
rotation tool is used so that all the different logging implementations
don't have to worry about log rotation.

- refactored common FileStream functionality into a base class that is
now shared between FileStream and WatchedFileStream.

- Allow users to specify WatchedFileStream in config files without a
fully qualified name.
- Suppressed the flake8 warning for an unused import as
WatchedFileStream needs to be in the globals dict

- Added WatchedFileStream tests in that mirror what is tested for FileStream,
plus one that tests the logrotate case

- Added docs for WatchedFileStream

- switched loggers from using FileHandler to WatchedFileHandler.
This change makes a seamless switch to using WatchedFileHandler
instead of FileHandler for the main logger and the builtin plugins.
If a system log rotation utility moves the circus log, circus will
continue to function fine when logging.

The only downside is a slight performance hit as WatchedFileHandler
stats the log file on each log call, but it seems like a good tradeoff
for a systems tool like circus to help ensure that the circus logs never
cause problems.