I ended up at `delete` after considering how to test for the existence of a key's value after that key has been deleted. If `undefined` is relied upon as an indicator that a key has no value, a user will not be able to store `undefined` and rely on `WeakMap.has`.

The two most reasonable solutions seem to be:
- on deletion, assign undefined to both the key and value, or
- use a third cell on the array to indicate if the value has been deleted

JS Perf gives both a small speed boost over `delete`.
http://jsperf.com/weakmap-deletion-optimisation