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