Fix issue 10773.
Add missing signature constraints for splitter.

As well as require bidirectional separator with length before assuming
retro(separator) and separator.length will work.

Without these additional constraints, splitter will cause unhelpful
compile errors about being unable instantiate find, when the separator
is a non-forward input range, or when it doesn't have length, or when
it's non-bidirectional. In the latter case, splitter should still work,
just that it won't export a bidirectional interface.
Don't need to loop over subranges to use equal().

I wrote it that way 'cos if the subrange is a distinct type from the
original range, equal won't compare them properly (compiler will
complain about == not being defined).

But in this case, it does work, so I rewrote it to use equal() directly.
Merge pull request #1456 from quickfur/issue10773

Fix issue 10773.