several changes to BuiltinMap: make it immutable; use persistent hashmap internally to save time on defensive memory copying; redesign cleaner APIs for efficient operations; rename other less efficient operations which involve memory copying and mention the cost explicitly in Javadoc; reduce defensive copying in call sites