Ok, I pushed an update. Python Social Auth copies over any key/value pairs in returned in `HackerSchoolOAuth2.get_user_details` if user has each attribute automatically. This means first_name and last_name are copied (and updated) automatically. This happens in `social.pipeline.user.user_details`.

I added the function `home.oauth.create_or_update_hacker` which does a similar thing for Hacker. Rather than copying over all attributes, it just copies `home.oauth.HACKER_ATTRIBUTES`. I figured we can hard code it because we know exactly what the attributes are (unlike the python social auth authors. They have to deal with each random app's different set of attributes). This meant `create_or_update_hacker` could be simpler because we didn't need the protected attributes list that `user_details` has.

This means if you ever want to add more attributes to Hacker and have them added to the database, you need to update `home.oauth.HACKER_ATTRIBUTES` as well as `home.oauth.HackerSchoolOAuth2.get_user_details` as well.