Adds asCollection() support, and the ability to instantiate with a source collection
Separates IntrinsicObjectModel and AbstractIntrinsicObjectModel
Adds returns of (this) for convenient chaining of calls
Moves primitive arrays to supporting long index ranges.

- asArray() only returns actual primitive array if describable (length is less than Integer.MAX_VALUE)
Updates tests with latest changes
Small cleanups
Updated for latest API change (getArray() renamed to asArray())