Adds multi-valued property support to Frames

Multi-valued property support provides the following:
 - *hasX* method will return true if the property has been set on the node
 - *setX* methods with a primitive argument will replace the current value with the primitive value
 - *setX* methods with an Iterable argument will replace the current value with the values of the Iterable
 - *addX* methods with a primitive argument append the primitive to the current value
 - *addX* methods with an Iterable argument will append the current value with the values of the Iterable
 - *getX* methods with Iterable return types:
  - Return empty Iterables when no value is present
  - Return single valued Iterables when a single value has been added
  - Return multi-valued Iterables when multiple values have been added
 - *getX* methods with primitive return types:
  - Return *null* when no value is present
  - Return the primitive value when a value is present
  - Throw an IllegalStateException when multiple values are present

Further:
 - Properties are returned in the order they are added
 - Be sure that handler methods for each property are using the same primitive type:
  - Incompatible types will fail fast when getting a single primitive type
  - Incompatible types will fail later - after the client references elements of the collection (due to type erasure)