withMeta() should return identity when new meta is identical to prior
For persistent objects, if meta is identical, should return the identical object rather than replacing meta and returning a new object.
This is implemented in some but certainly not all of the withMeta() impls.
Patch: clj-2362-2.patch (this patch has whitespace warnings due to retaining the CR style in files like PersistentQueue.java)
Screened by: Stu H
Updated to include PersistentHashMap and AFunction.