Make TabRestoreService::Entry noncopyable and fix up surrounding code.

Instances of TabRestoreService::Entry (Window and Tab) were managed by
hand, and had special support for copying even though they never
actually need to be copied.

This refactor starts by making Entry noncopyable and branches out.

Bigger changes:
- Entry is noncopyable. PlatformSpecificTabData::Clone is gone.
- Entry is usually wrapped in unique_ptr, including inside collections.
- [Important] ValidateEntry/ValidateTab/ValidateWindow take const
  references and return a result. They don't try to fix damaged entries.

Smaller changes:
- Entry is taken by const reference whenever possible, not const pointer
  or non-const pointer/reference.
- ifs that check if an entry is a Tab and assume it's a Window otherwise
  are now switch statements.
- Loops that iterate over collections of Entry are range-based when
  appropriate.

BUG=633689

Review-Url: https://codereview.chromium.org/2200993004
Cr-Commit-Position: refs/heads/master@{#410655}
26 files changed