Fixes and improvements to IntObjectHashMap

- Rewrite with linear probing, no state array, compaction at cleanup
- Optimize keys() and values() to not use reflection
- Optimize hashCode() and equals() for efficient iteration
- Fixed equals() to not return true for equals(null)
- Optimize iterator to not allocate new Entry at each next()
- Added toString()
- Added some new unit tests
going for a faster loop... the standard formula of multiply-and-accummulate-with-prime is a good default, but here the array can be big and this needs to be as fast as possible including potential unrolling/SIMD optimization.