Create a 'Backend' interface, and add an S3Backend

A 'Backend' represents a filesystem that we can sync locally. This adds general
S3 support, meaning you can pass in s3:// urls as file paths and it'll
download them before indexing.

This also adds a new flag, --check-for-success, which will make sequins only
accept versions with a _SUCCESS file in them. This is useful to avoid loading
partial results from hadoop.

Finally, there are some other minor fixes.
add an HDFS backend
add --refresh-period, for automatic version updating
Create the directory (if it doesn't exist) before calling Download
when reloading after we've already started, don't quit early
make sure we grab the reload lock when starting up
Merge pull request #1 from colinmarc/backends

Create a 'Backend' interface, and add an S3Backend and a HdfsBackend