Adds properties to class definitions

Classes can be defined using a specific syntax which allows for a
property to be defined with associated getters and setters. Both
functions are optional and can be replaced with a boolean to indicate
either a simple getter/setter (true) or no getter/setter (false).

Access control can be controlled to allow for any combination of
private/protected/public access to either the underlying property or
the getter/setter.