In order to support both local FS and s3 implementations, we need to extract a
common interface. This diff extracts the local FS implementation, and also yanks out
all the subscription / file watching management into a separate class.
The plan is to have the s3 implementation rely on the local FS for the subscriptions /
in-flight capture, but upload to s3 as soon as the compute is done.
Depends on D1035