Fix memory leak in OrderedMap

Inspired by JSC's implementation of Map, this adds a condition to OrderedMap#remove to replace and pack the backing store.

This means OrderedMap#remove is now an amoratized O(1) rather than a stable O(1) operation. One of N `remove`s will cost O(N). In exchange for this time-order complexity, OrderedMap's backing store capacity will be at most 2x its actual size, maintaining O(N) memory footprint (however with a possibly higher coefficient).