Fix emails

A previous commit mistakenly causes emails to always be withheld from
the Stripe form. This fixes that.
Rewrite badge renumbering function

The badge renumbering and shifting function has typically been brittle,
difficult to read, and ill-suited for modern purposes. This is a full
rewrite with the aim of making the function work better, particularly
with the new shift_custom_badges paradigm.
New badge numbers are always in range

Forces new badge numbers to only tack onto other badges that are in
range AND of the same type. This helps prevent range desyncs from
getting out of control.
Add last check for shift_custom_badges

All calls to shift_badges now check against this config variable.
Basic fixes to badge number function

Adds back in the ability to handle multiple badge assignments at once
and asserts SHIFT_CUSTOM_BADGES inside the shift_badges function.
Extra check for non-preassigned badges

Adds a second check to make sure we don't assign numbers when we don't
need to.
Remove checked_in check

next_badge_num doesn't get an Attendee object, so it can't see if that
attendee has checked in. Removing that check so it works.
Add overflow check

Adds a check to make sure badges don't automatically get assigned
out-of-range.
Add new tests for next_badge_num

Improves and adds unit tests for the next_badge_num function.
Merge pull request #762 from magfest/fix_badge_num

Fix badge renumbering
Allow changing of badge type

Allows admins to actually change the badge type when they try to change
the badge type.
Improves auto incrementing

Fixes a bug where new badges were being assigned the same number as the
last badge in the range.
Check the full range of badges

Changes the query so it includes the very last badge number in the
range.
Merge pull request #781 from magfest/fix_badge_num

More fixes for badge numbering and renumbering
Merge pull request #59 from magfest/ac-staging

Badge number fixes from staging for prod