Optimize firstObject/lastObject/objectAtIndex at bit

I was going to complain about how suboptimal #1005 was due to using the public API but then decided to try to make the public API not so suboptimal instead. Makes `firstObject` and `lastObject` as much as twice as fast by ensuring that the `TableView` is created before we check the count, fast enumeration ~10% faster by using __unsafe_unretained in useful places, and `objectAtIndex:` ~30% faster by caching the objectSchema rather than looking it up on every access.

@alazier 
I think the existence of this method will be confusing over time. Instead just duplicate the code in the two places it is called.