Optimize d3.keys

Native JavaScript Object.keys() method is heavily optimized for the specified task (http://jsperf.com/object-keys-iteration/20).  The native method does not perform on the object's prototype and as such, I have concatenated the object's keys with that of the prototype's keys because based on previous implementation it seems the keys of the prototype is also desired. Concatenation is also more optimized than pushing (http://jsperf.com/concatperftest/6).
You are correct in that the double bang is not required and my new commit should remove that redundancy, however this check is required for catching falsey values being passed in, such as null, NaN, etc...