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 The idea of mine was to make this `#[doc(hidden)]`, and strongly advise changing it as it might get changed anytime. This is just about making `VecMap<K, V>` use a trait bound for the key so inference won't break. (Inference would break if we'd only implement `VecMap<uint, V>` and later change it.)