OFDM systems are usually implemented using the FFT and its inverse. At the transmitter, information symbol values are assigned to the various OFDM subcarriers, resulting in a single OFDM symbol in the frequency domain. To obtain a time domain that can actually be transmitted over the channel, an inverse FFT is applied. The receiver on the other end of the link performs the reverse (it computes a forward FFT) on its observed signal, resulting (hopefully) in the original frequency-domain symbols, thus accomplishing OFDM demodulation.
Why add a prefix?
The short answer: multipath through the communication channel. You can think of multipath as a linear filter applied to the transmitted signal via propagation through the communication channel. Thus, the signal observed at the receiver is the original one from the transmitter, convolved with the channel response (and corrupted by noise). This results in intersymbol interference (ISI), which degrades system performance.
Techniques to undo the effects of this channel response are called equalizers, and are widely used in practical communications systems. However, their implementation and analysis can be somewhat complicated. It would be nice if, for your OFDM system, you could come up with a simpler equalization method.
Another way to mitigate multipath would be to insert some sort of guard time between symbols (a prefix) in order to allow the delay spread of the channel from one symbol to die out before the next. This strategy is used in many OFDM systems; the added prefix allows time between symbols for the channel's impulse response to die out, reducing or eliminating ISI. For most other systems, adding this overhead on each symbol would be prohibitively inefficient. However, since OFDM's effective symbol rate is much lower (since many modulated subcarriers are transmitted in each OFDM symbol time in parallel), the overhead of this approach is proportionally lower as well.
Why use cyclic prefixes?
Recall the fact that the OFDM symbols are modulated onto subcarriers in the frequency domain. Also recall the relationship between convolution and the discrete Fourier transform (DFT): convolution in the time domain corresponds to multiplication in the frequency domain. Therefore, the effects of the convolution with the channel response show up as pointwise multiplication of the frequency-domain subcarriers. This makes for a very simple equalizer structure: we just have to multiply each subcarrier by a (per-carrier) constant value at the receiver in order to undo the effects of multipath. This is typically called a "one-tap" equalizer, and is equivalent to assuming that any fading is flat across each subcarrier's bandwidth.
However, recall that multiplication in the DFT domain corresponds to cyclic convolution in the time domain. So, in order for this strategy to work, we would need some way of turning the channel response into a cyclic convolution, not a linear convolution as typically happens in the real world. That's where the cyclic prefix comes in.
The implementation: for each time-domain symbol generated by the transmitter, a cyclic prefix is inserted before it. That cyclic prefix takes the last $L$ samples of the $N$-sample time-domain symbol and concatenates it to the front of the symbol to be transmitted. Therefore, for each $N$-sample OFDM symbol, the transmitter actually emits $N+L$ samples. The length of the prefix $L$ is chosen to be greater than the expected multipath spread.
Why does it work?
With the cyclic prefix inserted, you can see conceptually how the linear convolution induced by the channel turns effectively into circular convolution; the cyclic prefix, which includes the end of the symbol, is smeared onto the beginning of the symbol by the channel's impulse response. This effect is quite literally defined as circular convolution, so the goal of achieving simple equalization is accomplished.