Handle primitive types `null` and `undefined`

Check for `null` and `undefined` and handle them the same as other
native primitive types. Previously `factory(null)` resulted in an error
thrown and `factory(undefined)` was handled the same as `factory()`.

Remove duplicate logic in `ImmutableObject.prototype.set` that also
happens in `factory()`.

Add tests to assert primitive values are not wrapped as they are already
immutable.
Merge pull request #1 from parshap/primitives

Handle primitive types consistently