refactor Cask::SystemCommand

* return a `Cask::SystemCommand::Result` instance from `Cask::SystemCommand.run` instead of a string
* stderr and stdout are now separated, though both are available
* exit status can be read from the result object
* plist parsing is more naturally handled in the result object, rather than at invocation time.  The `:plist` argument to the `run` method was therefore removed, and replaced with a `plist` method on the result object.
* make the `:print` and `:stderr` parameters consistent: now `:print_stdout` and `:print_stderr`

The only functional change is that (as part of cleanly separating stderr and stdout) stderr is always returned to the console unless explicitly suppressed with `:print_stderr => false`.  As the previous behavior was somewhat inconsistent, this is a bugfix.  However, we may need to compensate if needless messages crop up.

**WIP** at least one commit message should be revised