Fixups of some DRY violations when parsing command line arguments

* Created StageCommandLineArguments class for parsing String[] args
* Moved logic for stage creation from AbstractStage into a StageFactory
* Other misc. refactoring + additional comments
Added copy constructor to LocalDocument
Added file attachments to document class

Previously, attachments were obtained directly from RemotePipeline.
Removed all input stages and some unused output stages
Shipped stages now have setters and use these in tests

Stages will soon no longer have access to setParameters. It is so
much easier if they are simply beans, following common Java practices.
Moved AbstractStage.setParameters et.al. to AbstractProcessStageMapper
Big rewrite of api

* StageStarter is now the Main class

* Stages no longer have access to RemotePipeline.
  To discard a document, call LocalDocument#discard
  To get document attachments, call LocalDocument#getFile et.al.

* Now uses Guava Service. This simplifies the logic for shutting
  down threads.
All Exceptions thrown by stages are now caught without restarting JVM
Removed ProcessException and updated all stages
Fixed a logging issue in api

wiremock had log4j as a dependency, which confused
hibernate-validator.
Fixup. Removed unnecessary clone in ProcessStageRunner
Removed duplicate LocalDocumentTest
Fixup. Remove inner class UnsetDocumentFileRepository from LocalDocument
Fixup. Added a clarifying comment in a test.
Merge pull request #313 from laserval/rebased_remen_api_refactor

@remen's API rewrite (#305)