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.
@Gankro For the right design of this `VecMapKey` trait, one would have to think about ownership semantics. In this case `to_uint` takes `self` by reference, but I'm not sure this is the correct way to do it.