Fix bug 8900 - Zip with infinite range fails.

`std.range.Zip` contains a `Tuple`, whose `toString()` function calls `formatElement` which eventually calls this function, leading to a static call to `walkLength` on infinite ranges. Since pul request 880, `walkLength` doesn't work with infinite ranges, so it fails to compile.

This change ensures that `walkLength` is called with only valid range types.

Bug: http://d.puremagic.com/issues/show_bug.cgi?id=8900
improvements/fixes for count countUntil

Changes:

1. Count:
1.1 Better conditional statement
1.2 Count will now turn down any infinite haystacks (or else you'd count to infinity...)
1.3 Infinite needle will instantaneously return a count of 0.
1.4 Fixes a condition that was checking pred(haystack, needle), as opposed to pred(haystack.front, needle.front) (guess no one ever tried a fuzzy count?)
1.5 Fixes reference range support...*

2. countUntil:
2.1 Better conditional statement
2.2 countUntil supports InputRange for element and predicate search.
2.3 Fixes unicode bug (return the amount of popFronts, not index)
2.4 Fixes http://d.puremagic.com/issues/show_bug.cgi?id=8804
2.5 Fixes http://d.puremagic.com/issues/show_bug.cgi?id=8821

Note: count is still subject to the bugs in splitAfter
* Incorrect reference range support
* Incorrect split for forward range
Both are corrected in another pull.
As such, no unittests are added (yet).
more improvements in cout/countUntil
fixing countUntil vs indexOf issue
Quick splitter countUntil fix

This is more of a band-aid..., splitter needs some deep fixing anyways...
indexOf: More details

Not 100% about the text...
Changes to count[Until] as suggested by review
Added igammaTemmeLarge to std.internal.math.gammafunction.
Added possibility to initialize complex numbers with "real" types
Fixed for the case of different types of real and imaginary parts.
Added initialization of e.g. Complex!double with Complex!real
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.
Added unittest
fixup for Issue 8902

After default initialization, only the first one in overlapped fields is readable in CTFE.
Merge pull request #1007 from 9rnsr/fix8902

fixup for Issue 8902
Improved unittest
imporvements to uninitializedFill && initializeAll

Because they didn't really handle all of the cases correctly.

Added unittests.
fix issue 4489 std.array.insert is slow
structs with postblit, CTFE, fix -property
another -property error