fix never-ending login loop

if the app has not been linked yet, viewWillAppear
always presented the login-Controller resulting in a loop
the user is stuck in.
Fix it by factoring out code to present controller and thus
use the retry-count. if retries are reached, let the delegate know we cancelled.

Also, disable the 'cancel' barButton while the login-controller is presented.
This fixes a crash when DropboxSDK presents the login-controller async
and use dismisses the selection controller.
disable choose button while there's no valid data yet

factor test from tableViewDatasource and reuse it
to enable the choose button.