Add protected scope for getters/setters

Fixes #90
Do not include derived properties in equals/hashCode

Fixes #91
Optional return type for getters of nullable props

Instance variable of property remains nullable
This is as recommended for Java 8
Getter returns an Optional wrapper so no exposed nulls
Fixes #92
Handle Optional in serialization

Pack and unpack optional wrapper as best as possible
Optional wrappers of collection types are not supported
Fixes #93