Semi-Final arrangement of some core structural classes for the project.

Let me know what you think. Mike and I worked out this as a good core structure.
I don't know that I like passing around an `index` here.

What happens when a ton of items arrive? The observer gets notified for each new arrival as they're added, but the indexes may change as they're added.

Also, the contract with an IncrementalObserver is that results may arrive at any time. This means that you could develop a bug where a result is added at the same time as an observer is being notified about a previous addition. (because adding items occurs in separate threads.)

Also, the `IncrementalObserver` can always get the index of an item from the `IncrementalResult` if it really needs it.