C++ port of miscellaneous stream operations

Port the functions from the "Miscellaneous Operations" section of the
standard to C++.

The "Queue-with-sizes" operations are split into a separate header file
as they are logically distinct.

This CL also defines abstract classes "StrategySizeAlgorithm" and
"StreamAlgorithm" to represent the algorithms used in the standard.

The new functions are not yet used, but are groundwork for adding stream
implementations.

See the design doc at
https://docs.google.com/document/d/1n0IIRmJb0R-DFc2IhhJfS2-LUwl6iKSBNaR0klr3o40/edit

Bug: 902633
Change-Id: Ifb6b188ba20fe0640c2a008bc173c0c6615e572a
Reviewed-on: https://chromium-review.googlesource.com/c/1421417
Commit-Queue: Adam Rice <ricea@chromium.org>
Reviewed-by: Yutaka Hirano <yhirano@chromium.org>
Cr-Commit-Position: refs/heads/master@{#627344}
9 files changed