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.
FeedBuilder now builds Feed objects from JSON array

Now that FeedCache is gone, we're giving the responsibility
of checking to see if a copy of the feed fetched from a remote
server already exists in local database to the feed builder. If
it doesn't, it creates a Feed object for each dictionary in JSON
array.
Use fetched results controller to load locally saved feeds

Now that FeedManager doesn't return cached feeds anymore,
we let the fetched results controller do that task for us. By not
waiting until the latest feed arrives from a remote server, we
can present the users with previously fetched feeds immediately
when they go to the feed list view.
Inject FeedBuilder as a dependency to FeedManager
Remove data manager as feed manager's dependency

Now that the fetched results controller is in action and the
feed builder is responsible for saving the new feed into
the database, feed manager doesn't need a feeds data
manager anymore.