Implement command-based CLI, and start cluster-bringup

This change adds a CLI styled after the Go tool chain, with a design
inspired by that system. It adds 4 new commands, 'run',
'create-cluster', 'join-cluster', and 'version'. Full help is also
supplied.

Local-mode 'run' is fully functional, and 'create-cluster' also works.
Also, I like using pointers to structs in general. Then it's explicit that `nil` is returned instead of the zero value of `State`.  One more thing: you can combine your `json.NewDecoder()` with the `Decode()` into one line.