Introduce `Requirement` and `Requirements`

`Requirement` will represent a single requirement, while `Requirements`
will be a collection of individual requiremen instances.
Move the {BEFORE,AFTER}RUN_TESTCASE events
Introduce VersionRequirement
Introduce RegexRequirement
Introduce ExtensionRequirement
Introduce the Requirements Extension

And add a few acceptance tests for it.
Introduce Require Annotation
Add Annotation Based Requirement Acceptance Tests

Make sure everything worked.
Merge pull request #1 from chrisguitarguy/requirement_ext

Requirements