Feature/retry media upload

Implement retry functionality for media uploads that fails.

Solves: 
 * wordpress-mobile/WordPress-iOS-Editor#348
 * wordpress-mobile/WordPress-iOS-Editor#361

cc @bummytime @diegoreymendez 
Au contraire.  The good thing about having a single exit point is that you don't have to worry about the function state not being correct when you exit the method.  It means that if someone adds more code in the feature that needs clean up they don't need to worry about dealing with `return` statements.

This objectively means there's less to worry about and avoid redundant code.

If you want to make the code more readable, rather than doing this it's better to just use more atomic methods, so that the indentation is never too much.  This method's main problem is that it's huge.