Controlling 4 motors using the Arduino Uno
Can I control the 4 motors using 2 H-bridges (L293D)?


Yes. Two per chip.


  Are ESC's necessary if I use the PWM pins?


There is one thing you must understand first: there are two kinds of DC motor - Brushed and Brushless.

The Brushed motor is the "normal" kind - you apply power to it and it spins.  These you control with the likes of an L293D and use PWM to control the speed.

Brushless motors are the kind you have in hard drives and the like. They consist of a number of coils that get turned on and off at the right time to pull a magnet around in a circle (to put it crudely). These require special timing and control to get the coils energised at the right time and in the right way. This is what an ESC is for.

Brushless motors are smaller and lighter for the same power than brushed ones. They also have a longer life. Because of this they are generally preferred to brushed motors on quadcopters.

Brushed motors have a very high starting torque, don't require complex control logic and use less energy when not running full speed.

If you use brushless motors, which ideally you should (though I can't tell what kind of motors those are in that kit) then you must either use an ESC or build your own ESC using an Arduino and multiple motor driver circuits. Simplest to use an ESC.

If you don't use brushless motors then an ESC is not what you want to use - just the L293D chips and PWM.