[Touchless] Restore focus to last tab button and site suggestions.

* Reworked how focus was stored and passed around. Instead of having a
JSON backed class with strong types, use a TypedKeyValues object
backed by a Bundle. Each ViewHolder is responsible for creating these
when they're focused, and after onViewBind() the ViewHolders are
offered a generic focus object to see whether they want to restore
focus with it.

* Reworked when requestFocus() is called to be a little later, during
LinearLayoutManager#onLayoutCompleted(). This was necessary for the
above the fold views to correctly focus, and the NTP to mirror EoS.

* Added support for focusing the view elements with the above the fold
 card. AboveTheFoldViewHolder itself is still outside of the MVC
pattern, but delegation to the OpenTabButton and SiteSuggestions
components follows MVC.

Bug: 937452
Change-Id: I2df007f3a41007fd6a2b327b4729e30042d16bb7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1563035
Commit-Queue: Sky Malice <skym@chromium.org>
Reviewed-by: Justin DeWitt <dewittj@chromium.org>
Reviewed-by: Matthew Jones <mdjones@chromium.org>
Reviewed-by: Theresa <twellington@chromium.org>
Cr-Commit-Position: refs/heads/master@{#653363}
24 files changed