reorganize and add exception handling

- add dependency on exceptions to use MonadCatch
- add handling for things that should be reported as internal
  exceptions
- make RespondT preserve MonadThrow and MonadCatch
- improve documentation
- move serving stuff into proper submodules