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.
Without this struct, inference will assume that `uint` is the only thing that implements `VecMapKey`, and will infer the key type to `uint`, which would make making `VecMap` truly generic over its key type a backward-incompatible change.