KVO: for array-based observeKeyPath, use generics

Generics used to work with Swift arrays of NSObject subtypes (i.e.,
only NSObject, since AnyObject doesn't guarantee KVO support). As a
result, the observing block's object is now of the correct type rather
than AnyObject.