Added the ability to create a step library of steps that can be referenced from multiple scenarios.

This allows you to compose steps in much more flexible ways than relying on inheritance (favor composition over inheritance).
Added support for strongly typed context objects for sharing state between steps.