Jaroslaw Lupinski designed the Senpai (Shield for Extra Nimble Programming of Arduino) shield, to make it easy to program AVR microcontrollers using an Arduino:

If you want to take your device to the next level, you’ll need to program a bare AVR chip to run the code you’ve developed. If you want to build around the ATMega328 chip (the same chip that’s inside the Arduino), you can even program the bare chip with the same code as the Arduino sketch. A great sketch has been written by an Arduino user that lets you turn your Arduino into an AVR programmer. It’s great if you just need to program one chip and be done with it, but sometimes you want to develop code while a chip is socketed on a board, to program surface mount components, or to program lots of chips in a short amount of time. Using the shield I developed, you can use the ZIF socket to quickly swap out chips to be programmed (it supports 3 device families), or use the Atmel standard ICSP protocol to program chips that are already in-circuit with the ICSP header.