Required flags

Implements required flags as originally discussed in #85 

If we *really* don't want to change the interface, we have some other ideas of ways to do it, but are submitting this as the clean approach.
 -- @ivey @jhowarth 
Same here with respect to DRYing.