Multi element type conversion

Refactors type conversion methods in ClassUtils to a new class: TypeConverter.

Operating on the Type object instead of a Class allows for more sophisticated interrogation (e.g. of parameterized types).

This makes it possible to support recursively converting multi-element objects (collections and arrays).

The ClassUtils.setValue method was updated to use the new Type convert signature, so it should now allow collection and array fields to be populated.

The old conversion signatures were left in ClassUtils as deprecated.