More type refinement

Major changes:

 * `Comment`, `DocBlock`, `Declaration` et al. have been moved out into new `Types.X` modules, so they can be more obviously shared between the stages that use each
 * Used `Declaration DocBlock` for cross-references in `DocBlock`s, instead of the previous `Declaration ()`
 * `SourcePackage` renamed to `SourceParser` and turned into a `MonadIO`, to generalize any side effects and make it a bit more Parsec-esque in usage
 * `SourceParser` and `Writer` use Control.Exception for error handling now, since (based on my reading) it seems more conventional and flexible for side-effecting code