modern smallintmap module

This makes it a proper owned data structure without an @ box and a mutable field (from DVec), and implements the core::container::Map trait.

The old module is still around as `oldsmallintmap.rs` and migrating over to the new module seems like it will involve dealing with switching to explicit self and getting rid of mutable fields in the librustc code (at least without boxing it in @ again).