Implement User model

Changes from #24 plus our clean up.