Rework rendering to not redraw the entire keyboard every time

Instead of queuing a draw for the whole widget we instead only queue
draws for the mutated regions when a button state changes. This
requires some refactoring as the pressed buttons layout state now needs
a reference to which button is being pressed.

This also gets rid of any place where buttons were previously copied.

Fixes #210
9 jobs for fix-rendering in 23 minutes and 51 seconds (queued for 18 minutes and 25 seconds)