cpp/ranges/lazy split view

@1@ takes a  and a delimiter, and splits the  into subranges on the delimiter.

Two major scenarios are supported:
 * The view is an, the delimiter is a single element (wrapped in a ).
 * The view is a, the delimiter is a of elements.

@2@ A. The expression is expression-equivalent to.

@3@ The exposition-only concept is satisfied if  satisfies,  is a constant expression and suitable as a template non-type argument, and the value of  is less than or equal to. Notably, and  satisfy this concept.

models the concepts and  when the underlying   models respective concepts, and models  when  models both  and.

The inner range models the concepts  and  when the underlying   models respective concepts. It does not model, and cannot be used with algorithms that expect a or higher.

Data members
Typical implementations of hold two or three non-static data members:
 * the underlying of type  (shown here as  for exposition only),
 * the pattern (shown here as for exposition only) that is used as a delimiter to split the underlying, and
 * the caching object (shown here as for exposition only) of the std-like exposition-only type . The  caches the result of calls to . Present only if  does not satisfy.