enhanced to support ignoring named keys

main comparison methods now optionally take a list of keys as the 4th argument.  when this key is encountered, in 'a' (the first object), we check that it exists in 'b' and rather than comparing the value we simply return true.  This is particularly valuable in cases when a field contains a temporal value, for example a timestamp.