Freeze on match customization

Addresses #120 by introducing a new customization that freezes specimens based on a set of criteria.

### Usage

The `FreezeOnMatchCustomization` uses the `IRequestSpecification` abstraction as a way to match the incoming requests with the frozen specimen. For example:

```csharp
var fixture = new Fixture();
var freeze = new FreezeOnMatchCustomization(
    typeof(string),
    new PropertySpecification(typeof(string), "Foo"));
fixture.Customize(freeze);
```

This will assign the same string value to _all properties of type `string` named `"Foo"`_.

Multiple matching criteria can also be combined using the `OrRequestSpecification`. Here's an example:

```csharp
var fixture = new Fixture();
var freeze = new FreezeOnMatchCustomization(
    typeof(string),
    new OrRequestSpecification(
        new PropertySpecification(typeof(string), "Foo")
        new ParameterSpecification(typeof(string), "bar"))); 
fixture.Customize(freeze);
```

When no matching criteria are specified, the `FreezeOnMatchCustomization` behaves like the current `FreezingCustomization`, that is it will only match by _exact type_. More concretely:

```csharp
var freeze = new FreezeOnMatchCustomization(typeof(string));
```

is the same as saying:

```csharp
var freeze = new FreezeOnMatchCustomization(typeof(string), new ExactTypeSpecification(typeof(string));
```

### Follow-ups

The are a few things I deliberately left out until after I gather your feedback:

- Since the `FreezeOnMatchCustomization` effectively supersedes the existing `FreezingCustomization`, I propose we obsolete it and rename the `FreezeOnMatchCustomization` to simply be `FreezeCustomization` for consistency.
- I'll add the XML documentation once the feature is finalized.

I look forward to your comments.
> Is FieldSpecification then a correct name?

Originally, this specifiation used to check only the field's name and it was called `FieldNameSpecification`.
After a bit of usage, however, I found that ignoring the field's type caused conversion exceptions whenever AutoFixture would attempt to assign an incompatible value to a field whose name matched the criteria. I figured it only makes sense to match fields that have both the appropriate name _and_ are compatible with the type that's about to be assigned. So I renamed it `FieldSpecification`.

Now, a stricter specification could be `NumericFieldSpecification`, `FieldNamedFooSpecification` or even `StringFieldNamedBarSpecification`. A more generic one, could be `AnyFieldSpecification`, `FieldPrefixedFooSpecification` or `FieldInTypeBarSpecification`.
Matching by a field's name is by no means the most common case, so I should probably rename it back to `FieldNameSpecification` and let the type be a necessary but implicit part of the implementation.