Fix Issue 4483 - foreach over string or wstring, where element type not specified

std.process does not support Unicode and assume it's iterating over
ASCII.
Revive #1348: "Issue 9882 - Implement a "tee" style InputRange so that a function can be called during a chain of InputRanges."
Updated documentation to say that tee is useful for debugging long UFCS chains, and that the default behaviour is to call func on popFront
Forward back, popBack, and length if available. If _input.length is available statically, make it available statically in the result as well. Change pipeOnFront back to pipeOnPop because _input may have back and popBack.
Change documentation to reflect pipeOnPop, fix unittest failure.
Tabs to spaces
Change unittests to use UFCS
Change documentation and unittests to make it clear that the function passed to tee is not executed until the resultant range is evaluated.
Forward random access if the underlying range has it AND pipeOnPop is false
Actually define IndexType, change opDollar to alias length, not _input.length
Remove unnecessary check for static length on input range
Documentation tweaks
Removed type parameter on Result struct
Merge branch 'master' into std-range-tee-fixup
Remove forwarding of save and remove unittests for save functionality
Revamp to allow tee to take either an OutputRange or a lambda to output to
Small formatting fix
Fix small typo that was causing a compile error, redo comments
Partially done new unit tests for outputting to OutputRanges
Fix unittest taking a function as an OutputRange