Reduce hashtable collisions by increasing size.

Related mbostock/us-atlas#8.
Use typed array by index when joining.

Finding junctions is the most memory-intensive part of the topology computation
because it requires recording the neighbors of every point. To reduce memory
overhead, we now store the left neighbor and right neighbor as indexes in
separate hashtables rather than creating a new tuple for each point. This also
lets us use typed arrays to store the values.
Use a hashset to record junctions.

This is more efficient than a hashmap when we only care about set membership.
Convert to coordinate indexes before joining.

This eliminates the need to use a hashtable during join because the coordinates
are already unique.
Optimize hash function.
Add hashmap.maybeSet (set if missing).

Also fix a bug in hashmap.set when not replacing.
Rename for clarity.
Merge branch 'optimize'