Commands Refactor Part 2

We split #196 in two parts. this is the second. (#262 is the first). This builds on all the changes to commands/.
I'm thinking `req.Option("foo")` should return a type called `OptionValue`, which would have methods to get the value as a certain type (`.Bool()`).

> // because .String() expected to be something else.
I think it would be fine to call it `.String()`, since the go flags lib (http://golang.org/pkg/flag/) uses that name in this use case.

Also, I know you guys are set on returning an error to prevent panics when the value is the wrong type, but the flags library actually does not do that, and the caller is able to trust that the library handled the value correctly. If the value was somehow the wrong type, it would be a problem caused by the underlying code in the commands package, so it doesn't make sense to force to person implementing the command to deal with the error.

I agree with you in making sure the daemon isn't susceptible to triggering panics, and so a much better way to handle them is to make the daemon catch panics that happen in the command execution with `recover()` and treat them as errors.