Adhere to naming conventions in StatementContext.

The naming convention introduced is to have the most prominent entity that the method deals with named first in the method name.
The rationale behind this is to group the methods by name, and to facilitate IDE "tab completion".

Adds documentation explaining this naming scheme to the StatementContext interface.
Introduce an abstraction around the property concept.

Add an object that groups property key with property value.

This allows us to do all the type conversions (both incoming and outgoing) in one and only one place, and lets us know the exact type of a property "on the inside" without having to resort to instanceof checks.

The Property object is suitable for storing in the cache layer.
It deals with all the necessary defensive copying, conversion from boxed arrays to primitive arrays, and is optimized for minimum object overhead.
Use the Property abstraction in the implementation of get/set property.

On the top of the stack there are methods that delegate the old GetPropertyValue/SetPropertyValue methods to the new GetProperty/SetProperty methods.
At the bottom of the stack, only the new GetProperty/SetProperty methods are implemented. These delegate to the old NodeManager counterparts though.
Remove the {Set/Get}PropertyValue methods.

o Their usage and implementation are replaced by {Set/Get}Property using the Property abstraction.
o Change RemoveProperty to return a Property object.
o Remove the PropertyConversion layer, since there are no method calls to convert between anymore.