If you wish to maintain timing accuracy for millis() and micros() and serial baudrates selections then you can go into the IDE core file, boards.txt, and edit the board entry you will be using from (assuming a uno board):
Unfortunately that won't fix the code in wiring.c that relies on (MICROSECONDS_PER_TIMER0_OVERFLOW % 1000) being divisible by 8.
MICROSECONDS_PER_TIMER0_OVERFLOW is clockCyclesToMicroseconds(256*64)
256*64 = 16384
define clockCyclesPerMicrosecond() ( F_CPU / 1000000L )
So: 8 for 8MHz, 16 for 16 MHz and 20 for 20 MHz
define clockCyclesToMicroseconds(a) ( (a) / clockCyclesPerMicrosecond() )
8 MHz = 2048 That's 2 milliseconds + 48 microseconds
16 MHz = 1024 That's 1 millisecond + 24 microseconds
20 MHz = 819.2 That's 0 milliseconds + 819 microseconds
The microseconds portion is divided by 8 so the counter will fit in a byte. Each time the timer overflows the extra microseconds are accumulated in a byte and when they reach 125 (1000/8) another millisecond is counted.
819 / 8 = 102.375. Every 819.2 microseconds the overflow counter will be incremented by 102 and a millisecond will be counted when it exceeds 125. That's every 1.2254901... overflows or every 1003.921 microseconds. Almost 0.4% slow but I guess that's not too bad.
Really. You can't just set F_CPU and expect the arduino timing functions to work.
The GOOD news is that delayMicroseconds() will work as of V1.0. Someone addd code for the 20 MHz case. Previously there was only code for 8 MHz and 16 MHz. If your F_CPU is not 20000000 or 16000000 it is assumed to be 8000000.