Cache Node with ObjectProvider to cut down on lookups

Whenever a user operation requires the lookup of a Node for an ObjectProvider this results in a Cypher query to get the Node (or db.getNodeById()). Obviously each lookup will cost, so we can store the Node in the ObjectProvider "associatedValues".

May possibly need some further treatment later if during the lifecycle an ObjectProvider is attempted to be used with a different GraphDatabaseService but we'll approach that when the time comes - raise JIRA for it if some exception is thrown relating to Node invalid for the GraphDatabaseService

Description

Whenever a user operation requires the lookup of a Node for an ObjectProvider this results in a Cypher query to get the Node (or db.getNodeById()). Obviously each lookup will cost, so we can store the Node in the ObjectProvider "associatedValues".
May possibly need some further treatment later if during the lifecycle an ObjectProvider is attempted to be used with a different GraphDatabaseService but we'll approach that when the time comes - raise JIRA for it if some exception is thrown relating to Node invalid for the GraphDatabaseService