Initial addition of Stripe credit card payments capability

This commit begins the conversion of the First Data credit card module
over to Stripe.  Future commits will add the rest of the needed
functionality, rename the module, and remove old code.

Stripe works a bit different from standard credit card systems.  You don't
have to send them any data about your users if you don't want to, so I've
removed the billing/shipping address form.  Also, after the user has
submitted their card info, they are not charged immediately.  Instead,
Stripe sends us a unique string token, and then we can send it back using
the stripe Python library in order to actually charge the card.  This
means we have to add some exception handling in Python.

Overall these changes should make our payment system simpler (albeit with
a higher overhead fee), and allow multiple concurrent registrations to use
it.

Comments are welcome while this is a work in progress.
Add configurable settings for Stripe

The new model, StripeCreditCardSettings, is intended to replace the
existing CreditCardSettings which was created specifically for First Data.
Hook up StripeCreditCardSettings module extension
Add a function to check setup of credit card module.

This is mainly for admins, who may add the credit card module to a program
and not know that any more setup needs to be done.

More setup does need to be done, since we can't publicly distribute Stripe
account keys.  However, we can put keys in local_settings.py on the
production servers, in which case admins won't need to think about it.
Add a function to send an e-mail if there is a credit card error
Handle successful payments via iac.submit_payment()
Add handling of various credit card exceptions

Credit card payments require more attention to testing and exception
handling.  I have added checks for the various error codes you can get
from Stripe (and tested them by supplying the credit card numbers that
Stripe has reserved for checking this).

The template the user sees gives them some hint of what kind of error
occurred, in case this might be reassuring.  (Full details are e-mailed to
the program director and websupport.)
Clean up payment page template and add explicit line item for donation
Fix return links on credit card success page
Rename files for credit card module to Stripe
Rename credit card module class to Stripe
Install new module during migration
Remove old code which was specific to First Data
Fix a couple of minor template issues
Add dollar sign in payment success template
Abort payment if PO number is not correct

In case our system has made some mistake and a user requests a payment for
someone else's PO, we shouldn't charge their credit card.  We were
reporting the error, which is good, but still charging the card.
Merge branch 'main' into stripe-payments

Conflicts:
	esp/esp/program/modules/admin.py
	esp/esp/program/modules/base.py
	esp/esp/program/modules/handlers/creditcardmodule_firstdata.py
	esp/esp/program/modules/module_ext.py
	esp/requirements.txt
	esp/templates/program/modules/creditcardmodule_firstdata/cardpay.html
Fix merge conflict with credit card settings models in admin
Add ability to select line items in IndividualAccountingController.get_preferences()
Add set_donation_amount JSON view

This view takes a GET argument "amount", so the request should be
something like:
  GET /json/[program]/[instance]/set_donation_amount?amount=20

This will be used by the Stripe credit card module (but could conceivably
be used in other places).