Make `collections::VecMap` generic over its key type

In order to accomplish this, a new trait `UintKey` is introduced that allows
converting arbitrary types to `uint` indices and back.

As this adds a new type parameter to `VecMap`, this is a [breaking-change]. To
fix it, either annotate one of your insertions or set the key type to `uint` in
a different way.

This also fixes the previously broken `PartialEq` and `Eq` implementation of
`VecMap`.