You can actually control them directly using an Arduino without an external chip. Doing all servos on a particular port (port B, C and D) at a time will require disabling interrupts for up to 2 milliseconds, but other than that, it will work fine, and have very high accuracy. The way it works is:
0) Set timer 1 to tick four times per microsecond.
1) Calculate the "on time" for each of the pins. Note that pins on/off map to a particular byte value of masked bits you can write to the port register.
2) Build a table from "on time" to "port output value."
3) Sort the table based on "on time."
4) Disable interrupts, check timer 1 baseline, write all port bits to 1
5) while timer 1 minus basline less than next table value time, do nothing
6) set the port to the table value, increment the table pointer
7) if not at the end of the table (port value is not 0 yet) goto 5
This will give you approximately 1/4 microsecond resolution, which maps to 4000 steps between the 1000 and 2000 microsecond approximate end points of a typical hobby servo.
The main challenge is not losing input control data while interrupts are disabled, as the UART in the Atmega CPU only has a single byte of buffering.
One protocol might be to send a "go ahead" byte when coming out of all the disabled interrupt intervals, and immediately receive all the data for the next packet (if any.) Another may be to echo back each byte received, and on the sending side, only send the next byte after seeing the previous byte.