Add ability to add and remove observable events

I would like to be able to implement observable events in a model trait, but by setting the $observables property on a trait I would override it if it was set on a model. These methods will allow traits to add and remove observable events as necessary without impacting the events already set on the model they are on.

As discussed in #5035 this is now against the 4.2 branch.
Am I missing something, or should these methods make use of something like `array_diff()`?