shorten minimum first-on press

Usability testing showed the minimum button press was too long. It
appears that the light take a fair amount of time to turn on. It
may be better to cut the delay out entirely, but for now let's trim
off 6ms (delay 2ms).
move out "idle" code from the main loop

idle() is now for code that should be repeatedly called whenever the main
loop has nothing to do. Long-running and poll-like tasks should be put in
idle(). idle() is allowed to change state.
enter_state()

enter_state() for entering and indicating the next state.