Added in sign in steps.

Sign in steps provide you with fine-grained control over the process of
signing in a user.
Each step is run in order and will hand the session off to the next step
in the process.
Any step may also choose to fail the sign in process and provide a
message explaining why.
Additionally you could immediately determine the sign in process was a
success and skip
running additional steps.