various two factor auth improvements

* [x] implement TOTP checking in postgres
* [x] move two factor auth verification to postgres
* [x] remove the frontend's direct access to read TOTP secrets, but still let it set them
* [x] require 2fa at the database level for protected actions like login, withdrawal and turning off 2fa
* [x] create the tables for two factor auth recovery tokens
* [x] create the functions for two factor auth recovery tokens
* [x] create the frontend for two factor auth recovery tokens
* [x] make the tests pass
I thought `=` was equality and `:=` was assignment in PL/pgSQL.