Changing ByCodepoint's "save" signature

1) Because if it returns a ref, then it isn't actually saving anything...
2) Changed the "const" qualifier to inout: Using "const" means the return type is always "const ByCodepoint", which isn't a valid range (a const range can't be popped)

The change is mostly moot, since it would appear ByCodepoint's save or forwardness is never used anyways. But that doesn't mean it shouldn't be correct.
Refactored endsWith to use retro + startsWith.

What's the point of having all these powerful, generic, abstract functions if we're just going to copy and paste code? :-)

This change has several benefits:

* It is far more elegant.
* Changes (optimisations) to startsWith automatically carry across to endsWith.
* We get extra testing for startsWith and retro for free.
Gives sequence slice to end
Fix issue 8061.

We cannot assume that RoR.save will also .save the state of its
subranges; so the only way we can correctly export a .save method in the
joined range is if we also .save its subranges as we traverse over them.
No need to use .save on inner range if we aren't going to export .save.
performance tweaks for countUntil
Merge pull request #1019 from quickfur/joiner_save

Fix issue 8061.
Merge pull request #1013 from Poita/endsWithRefactor

Refactored endsWith to use retro + startsWith.
Merge pull request #1006 from monarchdodra/internalunisave

Changing ByCodepoint's "save" signature 
Merge pull request #991 from monarchdodra/dollartoken

slice to end DollarToken object, and slicing to end with Sequence
Additional fix for issue 6905

For the inference of return value ref-ness, we should use 'auto ref' instead of 'ref' or 'const ref'
Merge pull request #1028 from 9rnsr/fix6905

Additional fix for issue 6905
Merge pull request #1024 from monarchdodra/countStarts

performance tweaks for countUntil
fix memory corruption bug in unittest
Merge branch 'master' of github.com:D-Programming-Language/phobos
Fix #5762

This commit fixes issue #5762 with providing unittests. Another
(unrelated) unittest for options terminator is added as well.
Change options that are valid for getopt

There are some inconsistencies/annoyance of options supported by getopt.
Namely -t v was rejected but is now accepted as it is a very common way
to specify an option.
-timeout=v is now rejected as all other -timeout options already are.
This makes sense because -timeout is neither a proper short option (one
dash and one character) nor a long option (two dashes and more than one
character). --t v and --t=v are now rejected for the same reason.
In sum only the short options -t v and -t=v and the long options
--timeout v and --timeout=v are supported.
Additionally specifying a short options with the syntax -tv is now
only supported for v of numeric type. Because this syntax is convenient
but causes only no confusion for numeric values (e.g. -html5 should not
be confused with --html5).
Add short option accepting a value without a space

This commits adds support for short options with no space/equal sign for
_all_ types. The tests are changed accordingly. Even though supporting
this is quite controversial (many cases result in questionable behavior,
e.g. -timeout is read as -t imeout, if t is a short string option), it
is the default to avoid breaking code. But you can enable it only for
short numeric options via noSpaceOnlyForShortNumericOptions.
Further we throw an exception if a Boolean option is given with a value.
The commit also updates documentation and indentation to ease reading. A
faulty $(UL ) is removed.
Fix issue #5316 (comma separated values for array)

This commit adds specifying values for arrays (including associative) as
a comma separated list (e.g. --tune=a=0,b=1,c=2 and
--name=John,Mary,Alice). The delimiter can be configured prior to
calling getopt and defaults to ",".
Further unittests for arrays and associative arrays are provided.
Documentation for comma separating values is added.
Refactor ReceiverType