std::hashmap: Tighter representation for the Bucket

Replace `Option<Bucket<K, V>>` with a custom
`enum Bucket { Unused, Filled(hash, key, value) }`. The non-nullable
pointer optimization for enums with two variants will be active with the
new representation, while it was not with the old. This is if either
K or V is a non-nullable pointer type.

With these changes, now `Bucket<int,int>` is 32 bytes and
`Bucket<~str,int>` is 24 bytes on 64-bit, so we save the 8 bytes of enum
tag per bucket.