Add configurable buttons

Closes #8 
One problem with having this be a dictionary, is that it has no defined ordering. We could use a tuple instead, to maintain ordering, or maybe a `collections.OrderedDict` ?