Volunteer shift signups are working again

I've made some changes to how we do Angular now that I have an extra year of Angular experience and have a better idea of how to write idiomatic and testable Angular code.  (Still no Angular unit tests for the signups code, but at least we could easily write some now, whereas before it was out of the question.)

I'll leave a bunch of inline comments explaining what I did.
I love the power of SQLAlchemy, but their documentation is terrible.  Even after using it for years I occasionally make this kind of mistake EVEN AFTER SPECIFICALLY LOOKING UP HOW TO DO IT RIGHT IN THEIR DOCS!!!!!

Here I declared a cascading delete in the wrong way, which annoyingly doesn't even give an error but just does the wrong thing at runtime.  Bleh.

Anyway, this is just a Python behavior, so we don't need to re-create the database table or anything; I checked and the Postgres tables are all defined in the correct way, there was just a dumb Python error when trying to drop a shift.