Async subscribe

Updates the subscribe endpoint to avoid creating a user account within the view if `sync` is set to `N`, instead creating the user during the delayed task.

In order to make the code I was changing a little cleaner, I also happened to move all the utility functions out of `views.py` and into `utils.py`. I fixed up the tests to pass, and re-wrote the tests for the `subscribe` view as well as the `update_user_task` utility function because sorting through the existing tests (which sort've tested the view, task, and utility all at once) was proving too difficult. Apologies if that makes this hard to follow; I tried to separate the correct things into the two commits to help review.

@pmclanahan r?
Ah interesting! Spoken from experience no doubt. Good catch.