Checkbox id must exist before creating label

It doesn't matter, but the label's `for` attribute is still set even if we don't show a checkbox because the screen is unimplemented (i.e. when the menu object has a 'desc' key)
Refactored State with transactional operations.

Exposed public methods call the necessary functions to reflect the
changes.
Refactored reset_all to use one State call.

State.setState can now accept one or more IDs or DOM elements as second
parameter.