Added per-board settings, and major declaration refactoring.

Refactored the declarations of various modules' data, introducing the freemon.h header.

This is a bit of a cheat, but it tends to work out pretty well.
Added boardid_hash(), for GHashTable usage.

Also tweaked boardid_equal() to match the GEqualFunc type.

A bit annoying with the gconstpointer and gboolean sneaking in, but oh well.
Snapshot, boards get stored in the GKeyFile now.

No actual settings happening though.

Not 100% sure about the architecture here, but it seems at least reasonable.
First actual GUI code for board settings.

Very incomplete, and since there's no code to initialize the known_boards hash on load, autodetect must be clicked first.
Parse out boards from the GKeyFile when the config is loaded.
First board-settings editor visible at least.
Refactored widget-handling for setting editing, got string editing to work.

Still not very visible since known boards aren't copied by config_copy().
Implemented copying of the known_boards hash.
Fixed cb_known_board_copy() which was simply incomplete.

It needs to call config_keyfile_copy_with_templates() but couldn't since it didn't have the proper input.

Added fancy C99 code to build a specialized copy of the 'board_settings' SettingTemplate array that has the proper group in it.

This makes the rather peculiar boards settings look like regular global settings, and allows config_keyfile_copy_with_templates() to work.
Cleaned the call to config_keyfile_copy_with_templates() up a bit.

Even more C99 magic: use an anonymous struct literal instead of a temporary struct instance. W00t!
Retain KeyFile group for boards, so we don't need to re-generate it from the KnownBoard data.

Also disabled the Cancel button for the board editor since it's not implementable at the moment.

Will refactor the internals to make it easier to edit a single board's settings and then drop the changes on cancel.
One less call to boardid_to_keyfile_group().

Got to make use of the group string being pre-buffered.
Implemented partial Config copying, for board editing.

Also re-enabed the Cancel button, since we can now drop the board-specific changes on cancel.
Merge branch 'issue8-board-settings'

This seems to be working pretty well, now.

I even did a very quick run through the expected main path in Valgrind.