Fixing huge bug in Collection

before when a model was removed from a collection, the collection was
trying to unbind _model_event (the function that watches event on the
model) via

  model.unbind('all', this._model_event.bind(this));

This is WRONG because adding a .bind(this) creates a new function that
doesnt exist in the model's event table, the the event is never actually
removed. what this means is that

1. collections perpetually listened to ALL events from ALL models ever
added to them, regardless of whether or not the model was still in that
collection
2. models that existed in any collection were never garbarge collected
until the collection itself was garbage collected.

this is fixed now, by using named events (with the collection's cid)
instead of functions for event refs.
Fixing issue in FilterCollection

previously, a filtercollection bound to its master collection using the
named event "filtercollection:all". this is stupid, because if two
filtercollections bound to the same master, the second one bound would
overwrite the first's event handler.

the bind/unbind has been changed to incorporate the filtercolletion's
cid now.
Standardizing Collection.clear() to use remove()

Before, Collection.clear() was removing models manually from the
collection (not using Collection.remove()). and was also firing 'remove'
events *on the model*. interesting choice, past self.

this has been changed so that when clear()ing a colleciton, each model
in the colleciton is individually remove()ed, and there's no chance of
firing a remove event on a removed model.