LegacyImmutableObject module

This copies the old implementation of ImmutableObject into LegacyImmutableObject.
Add Immutable

As titled. First of 3 diffs to add Immutable, ImmutableMap, and ImmutableObject. No logic changes.
Allow falsy values in statics

We found that the component would break if we set any statics with the
value 0. It turns out @chenglou already ran into this with
d71736b3ed665d1ffcd0c34a55510ce266a30eb2 but the statics code was copied
earlier, and still has this falsy check. Made the same change, updated
the unittest.