port 0.1 fixes; is_map mixin; more tests & cleanups

putIfAbsent() is supposed to return this[key] (calling ifAbsent() to set it first if necessary).