Demonstrates problem where a module can affect how `LetDefinition`s are put in the ancestor chain
use an internal method name to avoid overriding helper methods, this will make behaviour more predictable
Merge pull request #937 from alindeman/refactor_memoized_helpers

Refactor memoized helpers
Revert "use an internal method name to avoid overriding helper methods, this will make behaviour more predictable"

This reverts commit ec4056a1ac839ff3fb76669bb741d8b27633a2d8.
Rewrite SharedContext to use a simple record/playback mechanism.
Move definition of implicit subject.

This is in prep for changing when the LetDefinitions module is included.
The use of `subject` from the `included` hook was causing problems when
I was trying to do that.
Delay inclusion of `LetDefinitions` module.

It needs to be included last so that its definitions can take precedence
in case of a name collision.
Get the current list of shared context methods from the modules.

This is the current list of what it supports:

describe
context
hooks
before
append_before
prepend_before
after
prepend_after
append_after
around
run_hook
around_each_hooks_for
let
let!
subject
subject!
its
Small refactor to add intention revealing message
Merge branch 'better-fix-for-let-definitions-eagerly-included'
Changelog entry for #942.

[ci skip]
#942 was a bug fix, not an enhancement.

[ci skip]
Skips one-by-one spec runs for JRuby
Fixes 1.8.7: apparently you cannot do multiple splats there