Arduino Wifly shield with SPI
To answer the PWM ports question, if the WiFly takes up a couple of the hardware PWMs then you will have to use a standard GPIO and use software PWM for the other motors.  

The basic idea with software PWM is to setup a timer with interrupt and increment a variable by one (from 0 to 255) on each interrupt. Also in the interrupt you compare a "duty cycle" variable and set/reset the pin accordingly e.g. GPIO_Pin = (duty_cycle &gt; count);

If you don't fancy trying to write your own, there is an Arduino Soft PWM library that does up to 16 channels.