withMutations returns self if no mutations occur. #77

This diff does a handful of things that add up to the title. First, it adds "altered" as a property of mutable Vector and Map. When these structures are mutably updated, the flag is set to true. We then use this to determine if we can safely return self from withMutations. Next, it reverts most of 3e1e874 and 536a27c which did this manually.

It also simplifies the implementation of OrderedMap and Set which are implemented using Map and Vector, as a side-effect fixing an issue where falsey keys would fail to set in OrderedMap.