split Property class to DecoderProperty and EncoderProperty to handle the case where we have a getter and no setter or vice versa
+ tests on field visibility