Prevent invoked expectations from being modified after they are invoked.

I paired with @mrgilman on this. I'm happy to carry the pull request over the line based on feedback.
It would be nice to not use `should_receive` since it's the deprecated syntax.  Also, `at_least(:foo)`, `at_most(:foo)`, `and_raise(:foo)`, etc are invalid even without your changes here.  It'd be nice to use valid constructs here, even if it doesn't all happen in a single line like the original issue had.  How about this?

``` ruby
  shared_examples_for "a customization on an invoked expectation" do |customization_method, *args|
    it "raises when the #{customization_method} method is called, indicating the expectation has already been invoked" do
      dbl = double
      msg_expectation = expect(dbl).to receive(:foo)
      expect(dbl.foo).to eq(nil)

      expect {
        msg_expectation.__send__(customization_method, *args)
      }.to raise_error(
        RSpec::Mocks::MockExpectationAlreadyInvokedError,
        a_string_including(dbl.inspect, "foo", customization_method.to_s)
      )
    end
  end

  it_behaves_like "a customization on an invoked expectation", :with, :some_arg
  it_behaves_like "a customization on an invoked expectation", :and_return, 1
  it_behaves_like "a customization on an invoked expectation", :and_raise, "boom"
  it_behaves_like "a customization on an invoked expectation", :and_throw, :symbol
  it_behaves_like "a customization on an invoked expectation", :and_yield, 1
  it_behaves_like "a customization on an invoked expectation", :exactly, :once
  it_behaves_like "a customization on an invoked expectation", :at_least, :once
  it_behaves_like "a customization on an invoked expectation", :at_most, :once
```

I've also used `a_string_including` here which is a bit less brittle than your regex because it doesn't care about the order the 3 bits of info are in, just that they are in the error message.