Generalize the interface

Now all the lisp-specific stuff is in the "Pipe" backend.
Add boolector backend
Add STP backend
Remove usedTypes field from SMTState
Remove unnecessary imports
Optimize "and" and "or" functions in case of empty arguments
Move template-haskell stuff to new package

It is highly unstable and isn't needed by most users.
Add Enum instance for BitVector type
Merge branch 'generalized-interface' of github.com:hguenther/smtlib2 into generalized-interface
Fix smtlib2 encoding of negative bitvectors
Optimize constant concat calls
Enable constant propagation for bitvector comparisons
Add optimizations for binary bitvector operations
Fix constant propagation for extract function
Fix bug in optimizing bitvector comparisons
Expose the AnyBackend backend to wrap other backends
Make template-haskell deriving work (kind of)

Doesn't yet work for mutually dependent data-types because of some weird TH bug in GHC.