Add a bit more type safety to our vertices and meshes.
Clean up vertex implementation.

Note to self: When implementing instances of `Storable a`, the `sizeOf`
and `alignment` functions need to be robust enough to handle inputs
of type `undefined :: a`.