fixes #2866: allow Button.Key to be a delegate

Works nicely.
But one thing remains unclear to me: 
How does the yaml loader know not to load KeyFunc from yaml? Or would he try to if there were a "KeyFunc:" entry in the yaml file? How to prevent this?


fixes #2866