Refactor how context hooks get run.

- Move `descendant_filtered_examples.empty?` check
  out into the `run` method.
- This allows us to only create the instances for
  the context hooks if we need to actually run the
  hooks.
- Move `before_context_ivars.clear` into
  `run_after_context_hooks`. This gives it
  parity with `run_before_context_hooks`.
Refactor: extract `config.with_suite_hooks` method.

The runner has no business understanding the details
of running the config object’s :suite hooks.
Refactor: extract :suite hook specs into their own file.

This includes new spec coverage for `(prepend|append)_(before|after)(:suite)`.

Also, only reference these hooks on the config object.
I plan to remove them from the `Hooks` module since they
are not general purpose hooks.
Refactor: handle :suite hooks within configuration.

...rather than delegating it to the Hooks module.

This will allow us to remove :suite support from the
hooks module, since it’s not something that is
generally supported in other hook contexts.
Explicitly ignore :suite hooks from Hooks module.

The Configuration class now handles these and it’s
the only place they are supported.

This allows us to reduce object allocations a bit,
and also clarifies the semantics of :suite hooks.
Warn when ignored metadata is passed with a `:suite` hook.

Fixes #1741.
Clarify terms used in spec.

`append_after` is the registration method, not the
type — the type is `after`.
Add changelog.
Merge pull request #1805 from rspec/hook-refactoring-plus-suite-hook-fixes

Hook refactoring plus suite hook fixes