Some prototyping

- Common defunctionalization code added in Data.Singletons.TH
- A bit of test code written by hand
- Partial implementation of function that generates type level symbols
Generate data declarations required by defunctionalization
Return datatype names together with their declarations.

Names will be required when defining instances of Apply type family.
Generate FooSym0, not Foo0
Generate Apply type instances for type level symbols
Support HEAD
Move TyFun, TyCon and Apply to Types module
Fix redundant imports. Use -Wall. Fix warnings.
Hacks for promoting higher order functions

- type promotion works for simple cases
- body promotion is a work in progress
Even more hacks to promote applications
Fix build on 7.6.3
Fix Apply promotion on GHC 7.6.3
Comments and code cleanup
Use UndecidableInstances for tuple singletons
Comment out broken code - REVERT THIS LATER
Testsuite modifications, tracing

* Some trace code in Singletons
* experiments with TyCon in Types
* modification of ByHand code to use Apply
* some testsuite hacks in cabal file to solve fPIC problem

All of this is a work in progress.
Use Apply in singletonized type signature
Proxies, first attempt
Separate singleton generation into two passes

Everything except function bodies is promoted in the first pass.
Function bodies are promoted in the second pass. The idea is to
gather during the first pass information required for adding
Proxies (when singletonizing type signature) and in the second
pass use that information to generate the body with extra Proxy
parameters inserted.
First steps to body promotion

Add monad transformer to accumulate number of proxies of each
parameter as we introduce proxies in the type signature