Reland "[ios] Extend the life time of navigation context to error placeholder."

This is a reland of 66d735a8758616bcedf19cefce8554d06de16b50 after fixing the
broken tests.

Original change's description:
> [ios] Extend the life time of navigation context to error placeholder.
>
> Also deferred WebStateObserver::DidFinishNavigation callback to after
> placeholder load finishes. This removes an inconsistency between legacy
> nav and slim nav handling of errors.
>
> Bug: 903497
> Change-Id: I7ee20859b3293da305e2a0ba15d017ea7be0ced8
> Reviewed-on: https://chromium-review.googlesource.com/c/1357613
> Commit-Queue: Danyao Wang <danyao@chromium.org>
> Reviewed-by: Eugene But <eugenebut@chromium.org>
> Cr-Commit-Position: refs/heads/master@{#613573}

Bug: 903497
Change-Id: I911a5b76c62f9f27f6c32f1981cdb5476c1db10c
Reviewed-on: https://chromium-review.googlesource.com/c/1362000
Reviewed-by: Eugene But <eugenebut@chromium.org>
Commit-Queue: Danyao Wang <danyao@chromium.org>
Cr-Commit-Position: refs/heads/master@{#613768}
7 files changed