Changes ApplyAssertionRulesEquivalencyStep to a more general AggregateEquivalencyStep

Conflicts:
	Shared/Equivalency/ShouldAllBeEquivalentToHelper.cs

Conflicts:
	FluentAssertions.Core/Equivalency/AggregateEquivalencyStep.cs
	FluentAssertions.Core/Equivalency/EquivalencyAssertionOptions.cs
	FluentAssertions.Core/Equivalency/EquivalencyValidator.cs
Changes the Restriction implementation to create an EquivalencyStep instead of an AssertionRule.
Moves classes to individual files
Adds some specs over equivalency configuration appearing in exception messages
Removes AssertionRules member from IEquivalencyAssertionOptions.
It is no longer needed for anything built-in.
Makes IEquivalencyStep use IEquivalencyValidationContext instead of EquivalencyValidationContext
Makes IEquivalencyValidator use IEquivalencyValidationContext instead of EquivalencyValidationContext
Makes TryConversionEquivalencyStep create a new context.

This allows the context to be immutable.
Moves EquivalencyValidationContextExtentions to its own File
Also renames EquivalencyValidationContextExtentions  => IEquivalencyValidationContextExtentions
Provides better advice for obsolete class
Corrects an issue wherein Using would apply the assertion rule to the root object.

While ultimately we may want this behavior it deviates from previous behavior.  Additionally it is not implemented correctly for handling the root object.
Revert "Moves default IEquivalencySteps from EquivalencyValidator to IEquivalencyAssertionOptions"

At this time I do not see exposing this to users.  Perhaps in the future.

This reverts commit d70c2cf0f41cb0af5d9722c25585767da701e686.

Conflicts:
	FluentAssertions.Core/Equivalency/EquivalencyAssertionOptions.cs
	FluentAssertions.Core/Equivalency/IEquivalencyAssertionOptions.cs
Corrects the name of EquivalencyAssertionOptions.ComparingEnumsByValue
Makes EquivalencyAssertionOptions.Using(IEquivalencyStep) internal.

That interface is not stable enough to expose at this time.