Use MonadIO for SourceParser, use Control.Exception

Although exceptions Aren't Great™, they seem pretty standard for
side-effecting code, so I'm just gonna run with it.