Command errors

This pull request adds in a form of more-detailed error reporting for commands.  Instead of a boolean success/failure return, they now return a `CommandResult`, which is just a fancy pair of status (success/invalid/failure) and message, with some logic to pump the results into a `ResourceSink`.

CommandResult is a bit of an instance of cracking a walnut with a sledgehammer, but I *did* try to keep things from going overly wacky, so there aren't a full range of `CommandResult` subclasses or anything silly like that.

Comments/critique very much appreciated.  After this this merged in, I think we'll start the process of cleaning up the code and making things ready for the first beta release.