Split the frame tree logic out of HistoryItem

This is a proposal for separating the per-frame data we need for history from
the frame-tree that HistoryItem stores.

This patch introduces HistoryEntry, which is basically a wrapper around
a tree of HistoryEntryItems. HistoryEntryItem contains a HistoryItem (which
stores the relevant data for the frame) and a vector of child
HistoryEntryItems. Multiple HistoryEntryItems can hold references to the same
HistoryItem. HistoryEntry/HistoryEntryItem have logic for doing a parital
clone of themselves while replacing the navigated item.

HistoryEntry keeps 2 maps. One maps frame ids (which are new) to HistoryEntryItems, the other maps FrameTree::uniqueName() to HistoryEntryItems. The frame id maps is sufficient for the vast majority of cases, but a secondary mechanism for finding a HistoryEntryItem is necessary when doing a back/forward navigation with iframes, as child iframes may want to load from history, but the HistoryEntry may not know about the new Frame object yet.

HistoryController know lives in Page, though for simplicity I left a helper
on FrameLoader that gets the Page's HistoryController.

This patch doesn't plumb the new data model all the way out, so HistoryController retains a mechanic for converting between the old HistoryItem child tree and the HistoryEntry tree.

Review URL: https://codereview.chromium.org/28983004

git-svn-id: svn://svn.chromium.org/blink/trunk@162131 bbb929c8-8fbe-4397-9dbb-9b2b20218538