First pass at new singletons-based Vinyl architecture

I have removed the (sy ::: t) thing in favor of a singleton-based
approach, along with a Tarski-style universe encoding. So Vinyl records
are (implicitly) parameterized by a universe of keys; for each universe
of keys, you must provide instances of the El type family to show how
they get interpreted into Hask. I shall be providing some Template
Haskell to make this easier.

This greatly simplifies all the types in Vinyl. I realize that this
change is pretty jarring and may seem to scuttle certain existing
use-cases, but I believe it is for the best.

Moreover, I believe it was a mistake to allow signatures of the
following form:

    Rec [ "x" ::: Int, "x" ::: String ] f

In addition classes (Apply, Dist, etc.) have been removed and replaced
with simple functions where possible. The other option was to build up a
Category Theory class hierarchy which was sufficiently general to have
Vinyl's structure as a special case---but I decided against this since
it was very difficult, and served little purpose; the signatures are now
simpler and easier to understand.

A handy <<$>> operator has been given, which does just what it looks
like.

Closes #13, #25, #29, #36, #19.
Use This Weird Trick to parameterize Rec by arbitrary El
Fixed some typos in the tutorial
Whitespace
Rename Data.Vinyl.Lift to Data.Vinyl.Functor; added some kit

- Demonstrate under what circumstances Lift (->) f g is a functor
- Demonstrate under what circumstances Lift (->) f g is a presheaf
- Demonstrate under what circumstances Lift (,) f g is a functor
- Demonstrate under what circumstances Lift (,) f g is a presheaf
- Demonstrate under what circumstances Lift (,) f g is an applicative functor
- Demonstrate under what circumstances Lift Either f g is a functor
- Demonstrate under what circumstances Lift Either f g is a presheaf
Minor cleanup
Clean up El in Intro.lhs
Remove singleton stuff from subtyping relation
Make := and <-: singleton-implementation agnostic

It is interesting that this is possible...
Make the lenses also singleton agnostic (!)
Vinyl is entirely independent of a particular singletons implementation

I had to replace the complicated Show instance with something I like
better to make this work. Basically, just give a record of names for
your universe as follows:

    names :: PlainRec (U.Const String) [Name,Age]
    names = SName =: "name"
        <+> SAge =: "age"

Then use `showWithName names rs` where `rs :: Rec el f [Name,Age]`, such
that `Show f (el $ r)` is satisfied for all the rows.

You may optionally give `names` as an `Implicit` instance and then use
`rshow rs`.
Correct some docs
Add a bit of TH to simplify the universe construction
Add macros for giving El

This is pretty dope
Cleanup in Data.Vinyl.TH
Merge pull request #43 from VinylRecords/templates

Add a bit of TH to simplify the universe construction
Use (r ∈ rs) instead of IElem r rs
Turn on more warnings; move orphan instances to Core

Also renamed Data.Vinyl.Relation to Data.Vinyl.Constraint
Make showing records look less ridiculous

Closes #10
Rename LazyIdentity => Thunk