Future-prove `collections::VecMap`

Since `VecMap` might want to have key type parameter at some point, add a key
type parameter now, so that code running today will still run when actual
generalization of the key is added.

The trait `VecMapKey` should really be private, but this is blocked by the fact
that you cannot export a struct, function or trait implementation with one of
the type parameters being bound by a private trait.
Because I don't understand the exact semantics and only know that `InvariantType` is the strictest. `CovariantType` would be more correct here?