do some nasty things to button.py

draw rectangles manually instead of relying on Sprite
split up redraw() so it only redraws what has changed
remove **kwargs
general cleanup