Overhaul USB HID for Leonardo and Micro

This pull request includes the features from pull request 1488 and pull request 1391. I've somewhat overhauled the code to better match the surrounding code and a few features.

I've also added code examples for the less discoverable features.

If this pull request isn't "right" yet, I'd love feedback so I can improve it.
I think this is the point where we can save a lot of flash. The Keyboard is nowhere passed in the source or inherited. And I dont know why users should overwrite these functions. Its not worth the flash size. And since they are new (the keycode functions) they are not used anywhere yet. In my opinion i'd also inline the whole API since begin and end has a very small implementation and refer to each other (at least in my code, because i set the report to 0 again which is important if you use end and begin. one thing that we also havent added yet.)