Range library for C++14/17/20.

This code was the basis of a formal proposal to add range support to
the C++ standard library. That proposal evolved through
a Technical Specification, and finally into P0896R4
"The One Ranges Proposal" which was merged into the C++20 working drafts
in November 2018.
