Clean up usage of defaultValue.

* Add a reusable defaultValue.EMPTY_OBJECT instance for convenience without allocations.
* Prefer `typeof a !== 'undefined' ? a : b` when not using defaultValue, to have a consistent order of values.
* Make `clone` not deep copy by default.  Use `clone` to avoid modifying passed-in option hashes.  Add tests.