Re-work hash iteration to use a HashIter.

This replaces the existing gather/take approach with maps over them,
which for .kv/.keys/.pairs is much more efficient as we never create a
load of Pair objects only to throw them away. Seems not to regress any
spectests on JVM or Parrot, and makes some TODO tests pass, most likely
because 'for %h.vk -> $k, $v is rw { ... }' is probably fixed.