A List implementation

Implements List (#4) by using an extra layer of indirection.

Also implements a functor instance for List.