Typed static queries

I'm opening this PR so we can discuss the current state of the implementation.
Better:

    val hlist1 = s4.first
    val hlistTyped: Int :: String :: Int :: Int :: Int :: Int :: Int :: Int :: Int :: Int :: Int :: Int :: Int :: Int :: Int :: Int :: Int :: Int :: Int :: Int :: Int :: Int :: Int :: HNil = hlist1

Giving the type directly in hlist1 ensures that the type is correct but not that the compiler can infer it without any extra information.

But it's great to see seamless integration of HLists there!