add Data.HVect

HVects are heterogeneous vectors indexed by vectors of types. While `HVect ts`
is isomorphic to `Data.Vect.Quantifiers.All id ts`, HVects are intended as
generic data structures like tuples or lists, while `All` to my understanding is
intended for proving things about Vects.
Add type-directed HVect functions and supporting Elem functions
Make additions public and require totality
Merge pull request #351 from Melvar/hvect

Data.HVect