Fix a race condition between checking received calls and building the exception message (#64)

Removed IReceivedCalls.FindMatchingCalls(...) and instead query from IReceivedCalls.AllCalls().
Improved thread-safety of CallStack.AllCalls() to copy ConcurrentStack before reversing and
  returning it to the caller to query.
Updated CheckReceivedCallsHandler to only access IReceivedCalls.AllCalls() once, then
  perform subsequent queries on that same copy of the data so checking
  received calls and building exception msgs are based on the same information.

Closes #64.
Adding IArgumentMatcher implementations to implement matching behaviour in argument specifications.
Exposing Arg.Matches on API to support custom matchers

Removing old argument specifications and replacing with argument specification that uses matchers

Added support for byref types to MatcherArgumentSpecification and
    renamed it to ArgumentSpecification after removing for abstract
    base class.

Updated ArrayContentsArgumentSpecificaton to inherit from IArgumentSpecification
    and implemented functionality from old ArgumentSpecification abstract
    base class.

Added IArgumentMatcher<T> interface to make it easier to enqueue custom matchers.

Added ArgumentSpecificationQueue to encapsulate creating arg specs
    from matchers and queuing them in the current SubstitutionContext.
Adding tests for ArgumentSpecification
Pulling out argument compatiblility check from ArgumentSpecification into AnyArgumentMatcher and delegating call.
Adding Type.IsCompatibleWith extension method.
Moving ArrayContentsArgumentSpecification logic into
  ArrayContentsArgumentMatcher so there is only a single
  IArgumentSpecification implementation.
Making ArgumentSpecification able to create a copy of itself that matches
  any args.

This moves the logic from CallSpecification and ArgumentSpecificationsFactory.
Better encapsulated actions in ArgumentSpecification.

Action no longer exposed on IArgumentSpecification.
CallSpecification can tell ArgumentSpecification to run actions, or create
  copies of themselves that match any args with same action for compatible
  types.
Added test for IsCompatibleWith(this object, Type) extension method
  when given a byref type.
Adding test for custom arg matcher

Moved IArgumentMatcher and IArgumentMatcher<T> into root NSubstitute
  namespace as it is becoming part of the main API.
Fixing up ToString from GenericToNonGenericArgumentMatcher so custom
  arg matchers display correctly in ReceivedCallsExceptions.
Adding ArgumentMatchInfo to describe matching between arguments and
  specifications.
Replace CallSpecification.NonMatchingArgumentIndicies(ICall) with
  NonMatchingArguments(ICall) method.
Changed signature of CallFormatter.Format to pass ArgumentMatchInfo instead
  of indicies of arguments to highlight.
Updated .gitignore to exclude .dotcover files.
Adding ArgumentSpecification.DescribeNonMatch(object).
Removing unrequired eventOperator ctor param from EventCallFormatter class.
Adding IDescribeNonMatches to allow custom IArgumentMatcher implementation
  to describe why they failed to match a particular argument.

- Implemented ArgumentMatchInfo.DescribeNonMatch().
- Made GenericToNonGenericArgumentMatcher<T> implement IDescribeNonMatches
  so that it can delegate to its matcher if the matcher supports describe.
- ArgumentSpecification.DescribeNonMatch(object) returns description of
  non-match if matcher supports it, otherwise string.Empty.
- ReceivedCallsExceptionThrower responsible for indenting non-match descriptions
  appropriately.
Adding some xmldoc to the public IArgumentMatcher and IDescribeNonMatches interfaces.