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