std.variant: Implement applyVisitor and applyDelegate.

applyVisitor allows to apply a visitor to the given Algebraic depending
on its held type. It works like boost::apply_visitor of Boost.Variant.
A visitor is specified as a structure
or class which implements opCall overloads for each supported type of the
Algebraic. The function statically ensures that all types are handled by the
visitor.

applyDelegate works like applyVisitor but allows to specfiy the visiting
functions as delegates or static functions. Static checks ensure that
all types are handled and only allowed delegates are passed to the function.
std.variant: applyVisitor had unnecessary template restriction.
std.variant: Updated pull request according to klickverbot's comments.

- Now compiles now on 64bit. size_t -> int cast in unittest has been the problem. Unittests and documentation has been updated.
- Updated template constraints: applyDelegates doesn't need one as the previous constraint is implicitly checked during instation. applyVisitor now has an additional template constraint to just allow Algebraic types.
- Must not compile code in unittests has been replaced by static assert and __trait(compiles) checks.
std.variant: Added more explicit template constraint to applyDelegate which checks for a Algebraic type.

The new constraint isAlgebraic checks for all member functions and types used from  Algebraic and makes it hard to call the applyDelegate with arbitrary types.
remove what looks like forgotten, useless code
remove -> linearRemove
don't append, but insert
test replace!Stuff with range Stuff
compare _data with 'is'
remove -> linearRemove
Rewrite of RandomSample to use Jeffrey Scott Vitter's Algorithm D.

This algorithm calculates a random sample of size n in O(n) time,
generating O(n) random variates, as opposed to the previously
implemented Algorithm S where both scale with the size of the
data being sampled.

Variable names in the implementation follow those in Vitter's
papers introducing the algorithm:

  * Vitter, J. S. (1984) Faster methods for random sampling.
    Commun. ACM 27(7): 703--718.

  * Vitter, J. S. (1987) An efficient algorithm for sequential
    random sampling.  ACM Trans. Math. Softw. 13(1): 58--67.
Tweaks to authorship & comments.
std.complex: Moved abs, arg & conj to module level

Backwards compatibility is preserved through the magic of UFCS.
std.complex: Cleanup

Moved some stuff around, removed some extraneous whitespace, made
function documentation more consistent.
Added std.complex.expi()

Also added Don as author, since there are several functions in
std.complex, including expi(), that are copied more or less verbatim
from std.math.
std.complex: Minor doc improvement
std.json: implement opIndex in struct JSONValue for accessing elements with array/hash syntax
std.json: properly handle large ulong values (bigger than 2^63-1)

store large ulong values in JSONValue.uinteger instead of throwing an overflow exception
skip() and skipA() should not be called as properties.

Ensures code builds with -property and -unittest flags
both enabled.
Fix Issue 8031 - If a class have some signals it's impossible for a derived class to have any signals

All `Signal` methods should be `final` because if they aren't it's impossible to add any signals into a derived class.

And yes, lets make `Signal` a `mixin template`.