Lcg/lazy deep merge2

changes:

1.  the deep merge cache is removed
2.  deep merge now takes a path into the attributes to merge and the merging API can do arbitrary subtrees
3.  we call deep merge on the top level `#[](key)` operator for the entire subtree
4.  deep_merge and hash_only_deep_merge were dup'ing like crazy and since we use an accumulator, removed the dup'ing.
5.  `#[]=` at the top level was always throwing an ImmutableAttributeModification (after doing all the work do a deep merge) so made it just throw that up front (node['foo']='bar' rather than node.default['foo']='bar')