Allow receive_message_chain to be constained by arguments

With the old should syntax you could constrain `stub` and `stub_chain` calls by their arguments using with, e.g.

```Ruby
describe do
  let(:object) { double }

  specify do
    object.stub(:call).with(1) { 2 }
    object.stub(:call).with(3) { 4 }
    expect(object.call 1).to eq 2
    expect(object.call 3).to eq 4
  end

  specify do
    object.stub_chain(:call, :call).with(1) { 2 }
    object.stub_chain(:call, :call).with(3) { 4 }
    expect(object.call.call 1).to eq 2
    expect(object.call.call 3).to eq 4
  end
end
```

But the equivalent in the expect syntax:

```Ruby
  specify do
    allow(object).to receive(:call).with(1) { 2 }
    allow(object).to receive(:call).with(3) { 4 }
    expect(object.call 1).to eq 2
    expect(object.call 3).to eq 4
  end

  specify do
    allow(object).to receive_message_chain(:call, :call).with(1) { 2 }
    allow(object).to receive_message_chain(:call, :call).with(3) { 4 }
    expect(object.call.call 1).to eq 2
    expect(object.call.call 3).to eq 4
  end
end
```

Fails on the later `receive_messaage_chain` because we don't define `with`. 

This makes that change, and supports constraining arguments on message chains. Given the simplicity of the "fix" I'm inclined to support this, WDYT @myronmarston 

Fixes #696.