Serial.flush() hangs on 2Mbps Baud Rates

A pull request is ideal.

Bear in mind that...

The problem with flush is a bug that affects everyone using flush. The fix is simple, easy to understand, and has no possible side effects. I suspect the Arduino folks will make that change.

The problem with the ATmega8U2 firmware affects very very few people. The fix is complicated, difficult to understand all the possible implications, and could have very dramatic side effects. I suspect the Arduino folks will not make that change.