cons: rework API to utilize C++11
In particular, this CL makes four changes:
1. Taking advantage of C++11's templated type aliases, we can replace
the awkward "Cons<T>::List" type with the somewhat more idiomatic
"cons::List<T>" type.
2. To allow cons lists to be usable with C++11 range-based for loops,
add a C++-style iterator wrapper and begin()/end() functions.
3. Use "nullptr" to create a nil list instead of "Cons<Foo>::List()".
4. Rename the "Cons" type to "Cell" so that "Cons" can instead
idiomatically name the function that constructs a new list cell.
BUG=414363
Review URL: https://codereview.chromium.org/
652093002
Cr-Commit-Position: refs/heads/master@{#299633}