Add signup form, signup logic, and tests