Since you mention the arduino, you're in a digital world. Here the PWM approach is definitely simpler, since PWM is digital, too. That is the reason why many microcontrollers have built-in PWM blocks.
For the arduino Google
arduino pwm
and one of the first hits is this:
http://arduino.cc/it/Tutorial/PWM
If you want to go to and fro, a good controller uses an H-bridge like for example this one:
http://bobblick.com/techref/projects/hbridge/hbridge.html
Using an H-bridge you can change the polarity to the motor's terminals, which allows you to control direction.
Controlling the H-bridge via PWM allows you to control the speed.
If you don't have to switch rapidly between forward and backward, you can substitute the H-bridge by a simple DPDT relay to control direction and a simple Transistor amplifier to control speed.
The BIG advantage of PWM over analog control (besides living in a digital world) is that you burn much less power in the controller/amplifier.
If the amplifier is off, I=0 and so P=0, too.
If the amplifier is on, V~0 (at least very small) and so P~0, too.
(I, V, P measured at the controller)
This is independent of the duty cycle of the PWM.
If you use an analog controller, the worst case is medium speed where V=1/2*Vmax and I=1/2*Imax which gives max. power loss at the controller (for other speeds either V or I decrease, thus P decreases, too).
I have simulated a very simple example:
Harald