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.
The problem with non-virtual methods is that you'll not be able to properly inherit from that class and override its methods due to early binding problems. When making these methods non-virtual you have to check the whole USB code base to make sure that a Keyboard object is nowhere passed as a parameter. Otherwise you will break compatibility. 3rd party code that has inherited from the keyboard class may still break afterwards.

> Indeed, this is certainly a large contributor to the bloat. This is where I admit I'm not sufficiently clueful about the arduino core coding standards. What's the potential downside to making these not virtual?