cleanup and add tests for block items
Parameterize the parsers' signature types.

As suggested by Manuel Chakravarty, these types should be parameterized
in terms of the provided monad. This avoids nasty errors of the sort where
methods that belonged in typeclasses weren't allowed because they didn't mention
any variables of the parameterized type.
Enable UndecidableInstances project-wide.

While this is definitely an Evil extension, it's necessary to have
inheritance in the parser chain.