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'd do it like this (sorry markdown isnt working here):
I am not sure though if the ifndef also needs the argument or not. But we could overwrite this report then from extern or just overwrite the report id if we also use a #ifndef HID_REPORTID_MOUSE there. Same for all other reports.

#ifndef HID_REPORT_MOUSE
#define HID_REPORT_MOUSE(report_id) /*  Mouse relative */ \
    0x05, 0x01,                      /* USAGE_PAGE (Generic Desktop)	  54 */ \
    0x09, 0x02,                      /* USAGE (Mouse) */ \
    0xa1, 0x01,                      /* COLLECTION (Application) */ \
    0x09, 0x01,                      /*   USAGE (Pointer) */ \
    0xa1, 0x00,                      /*   COLLECTION (Physical) */ \
    0x85, report_id,				/*     REPORT_ID */ \
[...]