Use a custom exception instead of overloading

We were overloading psycopg2.IntegrityError to model the case where
balance shouldn't be negative. Let's use a custom exception instead to
avoid muddying the waters.