Add shorthand `chain` syntax for custom matchers

The `chain` block in fluent matchers almost always just assigns its argument to an instance variable:

```ruby
RSpec::Matchers.define :be_bigger_than do |first|
  match do |actual|
    (actual > first) && (actual < @second)
  end

  chain :and_smaller_than do |second|
    @second = second
  end
end
```

Requiring a block is kind of overkill in this common case, and I get tired of reimplementing the exact same thing in every fluent matcher I define.

This pull request allows you to instead write:

```ruby
RSpec::Matchers.define :be_bigger_than do |first|
  match do |actual|
    (actual > first) && (actual < second)
  end

  chain :and_smaller_than, :second
end
```

Namely:

* you can just say `:second` instead of `do |second| @second = second end`; and
* as a bonus, since the DSL now knows a meaningful name for that remembered value, you can refer to it (e.g. in `match`) by saying `second` instead of `@second`.

I think this is an improvement. WDYT?
API visibility and ruby visibility are distinct concepts.  API visibility relates to SemVer: things that are declared as part of our public API can only be "broken" in major versions.  A method can be API public while being ruby private.  Consider the methods under `private` in [RSpec::Matchers::Composable](https://github.com/rspec/rspec-expectations/blob/v3.1.0/lib/rspec/matchers/composable.rb#L49): the mixin is specifically intended for use by end-users, and it includes methods that really only make sense to be called from within a custom matcher definition on itself (such as `values_match?`), so we made those methods private, even though it's still part of our public API, and fully subject to SemVer.

Anyhow, if you can make them private without causing ruby warnings, go for it!