Use CADisplayLink instead of NSTimer, dataSource updates

- CADisplayLink is a more high-resolution timer, that fire on every screen vsync (every 16-17ms), as opposed to NSTimer's runloop-based operation (which only fires every 50-100ms).

- Make collectionView:itemAtIndexPath:willMoveToIndexPath: optional, and, add a matching collectionView:itemAtIndexPath:didMoveToIndexPath: