Refactor user state into its own class

I'd like to make all this code a bit more readable, and having user states be their own objects is
part of that.

Eventually, hopefully, all of this code can be much more object oriented, and
each object can have an optimized, theta_flat-ish representation and a
normal, comprehensible one.

Test Plan: Test model, make sure it still works

Specifically, I ran

./start_mirt_pipeline.py [-n 3| 20] [--time and not --time] [--visualize] [--generate] [--train]