change ValueObject typing and new utilities

- ValueObject has a generic parameter that designates its wrapped
native type. eg. 'ValueString extends ValueObject' is now
'ValueString extends ValueObject<String>'.
- ValueObject.asNative() added that returns an object of its
generic parameter's type. This obviates the need for many of the
subclass's explicit getBytes(), getString() etc methods. Number
accessors were left since they skip auto boxing.
- AbstractCustom class added to make Custom types a little easier
(since existing downstream ValueCustoms already need to be fixed)
- Bundles.toJSONObject() and Bundles.toJsonString() methods added
- ListBundle.toString() now uses Bundles.toJsonString()