Fixes #8

Products are no longer fetched every time the main view controller
is displayed, only the first time. Both the product collection
and favorite collection view models are listened for rest
notifications, once a notification is trigered an internal
flag in the main view model is marked a loaded. This flag is used
to decide if it is necesary to actually load the collections.

This is not the best solution because if at least one of the request
is successful the flag is set to YES, it does not care if the other
one fails. But for this use case is more than enough.

A better solution will wait for both of the request to be succesful
and only then set the flag to YES.
Adds call to didMoveToParentViewController

In the main view controller when the collection view controllers
are created and then appended as sub view controller a mandatory
call to didMoveToParentViewController was missing. For more
information check https://developer.apple.com/library/ios/documentation/uikit/reference/UIViewController_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40006926-CH3-SW81
Fixes #1

The problem was that the paren view controller had the
adjust scroll view insets property set to YES. When you
add a child view controller, in this case a collection
view controller, this property is inherited and overwritten
by the parent.
Fixes #4
Adds a call to willMoveToParentViewController

A call to willMoveToParentViewController was missed when the
collection view controller was added as a child view controller
in the main view controller.
Still fixing issue #4
Removes unnecesary call to MAIN_THREAD.

The call to MAIN_THREAD is not needed because the operation
queue passed when registering the handler to the notification center
is the main queue. That means that the selector will be invoked
in the main thread.
Handler registration moved to viewDidLoad or init.

Notification handlers are no longer removed when the
controller's view is not visible. This assures that
modification to the view model are still made.
Fixes #10

Adds a notification handler in ProductCollectionViewController
that listens to notifications when a product favorite property
changes. Then when the notification is triggered the view
controller updates the state of the favorite button in the
corresponding cell if necesary.
Extracts logic to obtain a collection view cell from a product.