Freeze empty object

Call `Object.freeze()` on the empty object instance. Previously this
object could be mutated resulting in all objects being mutated (by way
of the prototype chain as the empty object is the root prototype for all
objects).
Missing semicolons
Fix bug with `unset()`

Add test for second case of `unset()` where the property being removed
is in the prototype of the object. Also improve assertions for `unset()`
tests.

Fix bug where `includeKey()` would be called with the wrong `this`
context.
Fix bug with `obj.set({})`

Move the check for whether there are any new props to be set so that it
happens before the check for whether the prototype can be reused.

Previously, the semantics of `sameKeys()` caused this case to
incorrectly traverse the prototype chain past the empty object.
Merge pull request #2 from parshap/improvements

Miscellaneous bugfixes and improvements