add random nonces to include guards, just because
add configuration structs

this includes somewhat-transactional semantics known from configuration
registers, though i should really find a better name than "transactions"
and "begin"/"commit" for what they do.
port GPIO to config structs