added type to session for different validations, fixed bugs and tests

The API error was being lost on subsequent calls to `valid?` on the Session
object, so I moved it to a property and tied it to the validation process.

There was a bug with Session initialization where we expected the params
to be setup on the object as is done by default with ActiveModel objects.

WARNING:
I fixed the currently broken tests, but they are passing for incorrect
reasons and should be cleaned up.