Sidekiq

Changed the `#activate` vs  `#activate!` naming. You should use `#activate` to trigger the job, and `#activate!` to by pass the job and just apply the state change. `#activate!` reflects that its potential dangerous as it does not use the job method.

Converted the job to a worker, using sidekiq conventions. Added testing.
It should raise an error, as this should be considered an impossible state. If this error is pop'd, then it means that input validation failed up the line. I rather fail and log these in the back-end, then silently eat them.