Add array data source that receives updates via KVO, Part Deux

This pull request builds off of splinesoft/SSDataSources#28 with the possibility of superseding it.

Instead of having a separate KVO array object, we'll double down on using `SSArrayDataSource` (as suggested [here]). The changes involve using KVO for array changes no matter how `SSArrayDataSource` is initialized.

There are a lot of granular commits to help see the evolution of the change. I can clean them up before we get the :thumbsup: to merge.

***

*Example from other PR*

Through the magic of [KVO], any manipulation through the collection's proxy object will result in row insertions/deletions/updates – no need to explicitly send a message to `SSArrayKeyPathDataSource`:

```objc
self.department = [Department new];
self.dataSource = [[SSArrayKeyPathDataSource alloc] initWithTarget:self.department
                                                           keyPath:@"employees"];

// someone, somewhere (think via the UI *or* via a background
// service), adds a new employee
NSMutableArray *employees = [self.department mutableArrayValueForKey:@"employees"];
[employees addObject:@"Shelley T. Bunny"];

// The UITableView/UICollectionView tied to SSArrayDataSource inserts a
// new row without an explicit…
//     [self.dataSource appendItem:@"Shelley T. Bunny"];
```

[here]: https://github.com/splinesoft/SSDataSources/pull/28#issuecomment-39520855