Ticket rework

Rework ticket generation and validation.

The previous implementation was designed to be mixed in a class and have the validation logic for each ticket type duplicated across all of the storage adapters. The proposed architecture keeps ticket creation within the module but reworks them as module methods; additionally, the ticket logic classes have been moved into the Tickets module. This will allow the persistence layers to only deal w/ saving tickets and not have to worry about their logic. Not only will this reduce the complexity of the persistence plugins but it will also keep all of the business logic within the core gem. I'll continue working in this branch to rework the in memory persistence layer to match.