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.
This is all idiomatic Angular code.  I'm happy to answer any questions, but unless someone has at least gone through the Angular tutorial, this probably won't make much sense.

One of the big reasons why this is implemented as an Angular app is that I'd eventually like to write a bunch of unit tests, though obviously I haven't done that here, nor will I have any time for that this year.  Still, we've at least set ourselves up for that.