A List implementation

Implements List (#4) by using an extra layer of indirection.

Also implements a functor instance for List.
I think we should just call it `head` and `tail`. If we want a fast `head` that could crash, we can call it `unsafeHead`. :)