Handle Template Haskell expression/type/pattern/declaration quotations differently from Quasiquotations

Most importantly, the former allow nesting, e.g.:
`foo = [| $( [| 1 |] ) |]` (The intervening splice is required, but we don't
check this here). Such nesting currently messes the highlighting up.

I'm also highlighting the contents as Haskell (`contains=TOP`), which is arguable
(it'd be best to overlay the normal Haskell highlighting with some indication
that we're in a quotation (e.g. different background colour), but I wouldn't
know how that's possible in Vim).