Implement ConcurrentArrayList

This decorates an ArrayList changing the iterator behaviour. This allows
for concurrent modifications to the list while a thread is
iterating. The iteration will see these updates. This makes use of
locking and should be consistent.
Pull the cursor out of the state machine as mutable state

This is to allow manipulating the cursor as the collection is
manipulated. The reason being: if items are added or removed to the
collection before the cursor it causes the entire collection to 'slide'
and the cursor must be adjusted.

Seems to work but this is ugly as hell.
Add comment
Use a WeakReference-based set to hold current iterators
Bump