Optimize selection.data(values, key)

Preallocate the keyValues array and use a single Map with the
sentinel value `true` to represent a previously seen key.

Before:

selection.data(values, key) (enter) 1.5ms/op.
selection.data(values, key) (update) 1.7ms/op.

After:

selection.data(values, key) (enter) 0.81ms/op.
selection.data(values, key) (update) 1.1ms/op.
Merge branch 'optimize-data' into optimize-map-create-null

Conflicts:
	src/selection/data.js
Always escape __proto__ in d3.{map,set}.

Rather than conditionally checking for it and changing the class definition,
just be pessimissitic and assume that it’s a bad idea to set __proto__.
Object.defineProperty is now required.

Since d3.map and d3.set now rely on Object.create(null), we also now rely on
Object.defineProperty to create non-enumerable properties.