Automatically log in users who access third party login after trying to register for a course

This PR refactors `change_enrollment` and `enroll` so that `change_enrollment` handles only validation we'd expect in a view ("is the user logged in before trying to access this view", "is this user in the auto-register A/B test", etc), and the `enroll` method handles more "server"-y concerns (is the class already full, does the class exist, etc).

That way, the third party login flow can simply call `enroll` directly without worrying about skipping over any important checks, since we don't really have access to views midway through the third party login flow.
Do we have unit tests of `student.views.register_user()` that verifies that this session variable is set?  It might be worth adding a test that:

1) Invokes `student.views.register_user()` using the Django test client.
2) Calls this pipeline step directly, plugging in the session vars from the client into `kwargs['strategy']`.

This isn't super realistic (since we're simulating the auth pipeline), but it would protect us from accidentally breaking this down the road.