Use fetched results controller to provide feed data to table view
Listen to fetched results controller's delegate methods

NSFetchedResultsController registers to listen change
notifications on managed object context and properly
updates its result set. After that, it notifies its delegate
about the changes (creation, update and deletion) of
underlying Core Data model (in this case Feed) via
methods defined in NSFetchedResultsControllerDelegate
protocol. We insert, delete or move rows in news table
view in response to those changes.

Note: It is important to send beginUpdates and endUpdates
messages to the table view instead of reloadData during this
update process.
Remove FeedCache

We don't need to manage feed cache ourselves anymore.
NSFetchedResultsController efficiently loads a small batch
of news feed at a time as the user scrolls through the list.
It also listens for updates made to Feed model in Core Data
and notifies its delegate when those updates happen. As a result,
we don't need to coordinate the communication between database
update and feed list view controller ourselves through series
of abstractions.

Note: The fetchFeeds API in FeedManager has changed slightly
to not return cached feeds immediately. All this method does now
is initiate retrieval of feeds from a remote server. We let the
NSFetchedResultsController load locally saved Feed objects
from Core Data while the latest feeds are being fetched from the
server. As a result, the user is presented with previously fetched
feeds immediately when she goes to the feeds list view. This approach
helps us provide a good user experience by not forcing users to
wait until a network request is complete to see any feed.