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.