Services code review 1

I have been working on implementing services and thought it would be nice to get some feedback. This is still a work in progress, so this should not be merged.

Check out the new tests in Tests/MsgGen.hs, and Tests/ServiceClientTests/ServiceClientTest.hs (instructions in comments). Right now it can generate Haskell types for service messages (tested by MsgGen), and call ROS services without any error handling (tested by ServiceClientTest).

Service message generation is not yet integrated into the executable.

Service Haskell types are just like message types except that they are also instances of SrvInfo. The generated Haskell message type files should be the same as before except they might have an extra newline at the end.

Except for MsgGen, changes to existing code are minimal: there is some code extraction and changes suggested by hlint.
Doing that results in a type error. Since `handler` returns an `IO` action, throwError expects an `IOException`. This is because in the `MonadError` class the error has a functional dependency on the monad returned by `throwError`.

```
Couldn't match type `GHC.IO.Exception.IOException'
              with `ServiceResponseExcept'
When using functional dependencies to combine
  Control.Monad.Error.Class.MonadError
    GHC.IO.Exception.IOException IO,
    arising from the dependency `m -> e'
    in the instance declaration in `Control.Monad.Error.Class'
  Control.Monad.Error.Class.MonadError ServiceResponseExcept IO,
    arising from a use of `handler'
    at /home/robbie/git/robbie/roshask/src/Ros/Graph/Master.hs:55:55-61
In the second argument of `flip', namely `handler'
In the second argument of `(.)', namely
  `(flip catchIOError) handler'
```