Enhancement request 13022: add `std.complex.sqAbs`

Add `std.complex.abs2`, which returns the squared modulus of a
`Complex` or real number.

Rationale:
* It is common to need the squared modulus of a complex number,
and using `abs(z)*abs(z)` would be inefficient due to the
computation of the square root.
* The name `abs2` has been chosen for consistency with `abs`, and
for being mathematically more correct than `norm`, used by C++ STL
for the equivalent function.
* For genericity, the function `abs2` is also declared for real
floating point numbers, in which case it simply returns its
square.

UPDATE: use `sqAbs` instead of `abs2`.
Document std.range.transposed (issue 4330).

Add unittested example as well.
Fix issue 8764

Transposed can only work with ranges of ranges if the subranges are
assignable. Add signature constraints.

Fix forward range bugs (should use .save instead of just copying the
range object).

Add unittests.
Move docs from struct Transposed to transpose().
Modified Levenshtein distance()

Modified the implementation of Levenshtein distance so that it now uses O(n) memory but retains the same time complexity. However, does not work with path().
Modified Levenshtein distance()

Modified the implementation of Levenshtein distance so that it now uses O(n) memory but retains the same time complexity. However, does not work with path().
Fixed formatting

Moved all braces so that they are on their own lines and removed the trailing whitespace after function declaration;
Moved previous distance() implementation

Moved to be a private method and only expose new more memory efficient
distance(). This is done because we need the old implementation for
path(). Modified levenshteinDistanceAndPath() to use the old distance()
to reflect this.
Refactored, added unit tests and removed opIndex.

Moved checks for which Range is longer to levenshteinDistance() method.

Reverted to implementation found in original distance() with regards to
using front/popFront instead of opIndex.

Fixed formatting of return statement.

Added two unit tests for levenshteinDistance().

Credit to @Poita.
Refactored distance() and corrected path()

Refactored distacen() so that it now accepts the lengths of the ranges
because we already calculate these in levenshteinDistance().

Altered ss in distance() and tt in distanceWithPath().

Moved popFront()’s to after their final usage to handle transitive
ranges.

Corrected path() so that it calls distanceWithPath() instead of
distance().
Removed calls to matrix() in distance()

Since _matrix is now a single dimension matrix, calls to matrix() have
been removed and replaced with direct access equivalents.
Changed the implementation of distance() so that it uses the memory inefficient version to prevent breakage in the API. Efficient version has been moved to distanceLowMem() in the struct and is called internally by levenshteinDistance()
Removed the accidental semicolon
Don't use fprintf to output D strings since they might contain embedded nulls.

Instead, use fwrite to output the string in its entirety. It's probably
more efficient this way anyway, since we bypass format string parsing in
fprintf.
Update unittest to check for correct writing of embedded nulls.
Fixed handling of a struct with no "length" field defined but with opDispatch of inappropriate type.
fix Issue 12853 - std.encoding EncodingSchemeUtf16Native and EncodingSchemeUtf32Native decode() and SafeDecode() wrong stripping length
Merge pull request #2195 from JamesDavidCarr/master

Changed distance() to be more memory efficient based on email from mailing list.
fix Issue 12853 - std.encoding EncodingSchemeUtf16Native and EncodingSchemeUtf32Native decode() and SafeDecode() wrong stripping length
fix Issue 13077 - std.range.array with shared InputRangeObject