[ios] Refactor ExternalAppLauncherTabHelper

This CL achieves several objectives:

1) Removes the use of |rootViewController| to present UI.

2) Separates launching from the policy decider logic. The
tab helper holds the policy decider logic. The app launcher
coordinator does the actual app launching.

3) Better naming: "ExternalAppLauncher" was renamed to
"AppLauncher". It is more concise, and "external" did not
provide any value as there is no "internal app".

4) Better folder structure: the tab helper was pulled out
to it's own folder /chrome/browser/app_launcher. The app
launcher coordinator lives in /chrome/browser/ui/app_launcher.

5) Unit tests were added to the coordinator and tab helper.

Bug: 791792
Cq-Include-Trybots: master.tryserver.chromium.mac:ios-simulator-cronet;master.tryserver.chromium.mac:ios-simulator-full-configs
Change-Id: I53ab441db05b85211102df169a264f0fcf53195c
Reviewed-on: https://chromium-review.googlesource.com/837725
Commit-Queue: edchin <[email protected]>
Reviewed-by: Eugene But <[email protected]>
Reviewed-by: edchin <[email protected]>
Cr-Commit-Position: refs/heads/master@{#530375}
25 files changed