Move Command boilerplate into SparkCommand

There are a few things happening here:
* `Command` is now parameterized by an "Arguments" class
    * `Command.run` takes an instance of that Arguments class rather than raw `String` args
* All of our callers are now `SparkCommand`s
    * They take a `SparkContext`
        * Important: you don't have to manage `SparkContext` lifecycle!
        * History server fix (`sc.stop()`) is [included](https://github.com/ryan-williams/guacamole/commit/6110f8ee7ffcc6bd0043391ca5313a237a7b63c7).
* The [first commit](https://github.com/ryan-williams/guacamole/commit/44fc3d4a4c66bc6d6e8c0bf670d7cb70ab378a71) basically changes whitespace in all the callers and made for messy diffs, so you might prefer to look at each commit separately.
Based on some of the comments on the JIRA should this be in a try/finally?