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.
New implementation of visit and tryVisit that allows visitor structs and classes as well as delegate functions to be passed as parameters.

tryVisit is a new function which doesn't statically ensures that all types are handled by the visiting
functions. A VariantException is thrown if the algebraic holds a value which isn't handled by
the visitors.

visit and tryVisit share a common private template function as backend which does all the magic. applyDelegate and
applyVisitor have practically been merged into one new function.
fix install
Merge branch 'master' of github.com:D-Programming-Language/phobos
Merge branch 'master' of github.com:D-Programming-Language/phobos
Merge branch 'master' of github.com:D-Programming-Language/phobos
Merge branch 'master' of github.com:D-Programming-Language/phobos
Added new overload for takeNone which can sometimes return the original type.
std.typetuple docs: Use "template predicate".
Document non-short-circuiting behavior of allSatisfy/anySatisfy.
Made it so that stride works with arbitrary ranges of code units.

I also added overloads for stride which don't require an index (they
operate on index 0).
Made it so that strideBack works with arbitrary ranges of code units.

I also added overloads for strideBack which don't require an index
(they operates on the last code point).
Made it so that decode works with arbitrary ranges of code units.

I also added decodeFront which operates on the first code point in the
range (unlike stride and strideBack, it requires a different name, since
the signatures of decode and decodeFront are almost identical - the only
difference being that decode takes the index by ref, and decodeFront
takes it as out).
Workaround for bug# 8521.
Added std.range.Sequence slicing (Issue 7896)

See http://d.puremagic.com/issues/show_bug.cgi?id=7896 for more information.
Fix for issue# 8334.
Removed const from Sequence.opSlice()

Also fixed stylistic issues.