Miscellaneous bugfixes and improvements

These change is basically backwards-compatible and simply fixes bugs or unexpected behavior.

 * `Object.freeze()` the *ImmutableObject* empty object
 * Add missing semicolons and remove trailing whitespace
 * Fix bug with `unset()` due to wrong `this` context and add more tests around `unset()`
 * Fix bug with `set({})` where an empty object caused invalid traversal of the prototype chain

See individual commit messages for more details.