Fix memory leak in GameStateConfig

In cases where checkboxes weren't defined in menus/config.txt, those
widgets would not be added to the child_widget vector. This caused them
to not be deleted properly when destroying GameStateConfig.

This commit has a few other small changes:
- replace placeLabeledCheckbox() with placeLabeledWidget() for more
general usage
- use vectors instead of arrays
- added an enum for config menu tabs
- renamed some things for clarity