Introduce private properties
Separate NativeProperty class
Remove ReferenceProperty class
Clean up some minor methods