Add Collection

This is a fairly basic Collection implementation, with no concept of persistence.

### Methods
#### add(models, [options])
Models can be added as `Model` instances or object literals.  Adding models which already exist in the collection will merge attributes into the existing instance, passing `{merge: false}` disables this behavior.

#### remove(models, [options])
Models should be removed with a `Model` instance; passing `{destroy: true}` will destroy the model.

#### get(id)
Retrieve a model by id or client-id (cid).

#### at(index)
Retrieve a model by index.

#### sort()
Manually re-sorts models using `comparator`.  If `comparator` is defined, this will happen automatically per `add`, `remove` call.

### Properties
#### model
Defines the class that will be used to construct models when passing objects to `add`, defaults to `base/Model`.

#### comparator
A sorting function which will be used to keep the models in order.

### Events
Events are only triggered once per add/remove call although it may be desirable to rework this to trigger add/remove once per added/removed model.  Add/remove events can be deferred by passing `{silent: true}`.