Collect dependencies on all types

Previously dependencies (get events) are only collected from
tip values - this prevents objects being collected as dependency.
The issue in #178 is that the user begins a value as non-object,
but has a binding somewhere that indicates the value can be an object
later. The observer converts the value to an object implicitly,
causing expressions not picking it up as dependency. This change
makes the observer emit get events regardless of type.

Also utils.set and get have been fixed to check for both null
and undefined.