Improve Template Haskell usage

Quasiquotation now takes a more central role in the library, which
reduces the amount of AST combinators required.  Furthermore, all
functions now return 'DecsQ', which makes combining them a bit more
uniform.

One actual bug fix in this commit: due to overzealous usage of 'mkName'
instead of 'newName', splices in previous versions could trigger a
warning about shadowing global variables.  (In particular, you’d see an
error if you defined a global variable named 'e'.)

Thanks to Eric Mertens <emertens@galois.com> for his code review and
suggestions.