Changed usb handler structure to use weak references

Not sure if it's the best plan, but we shall see how this goes

I don't particularly like the giant switch statement
Removed the ugly switch and added back the handlers array

This does allow the handlers to be changed at runtime, but it does keep the
weak symbol method of doing things
Began adding string descriptors
Changed build process to use a Makefile

The issue with using the code::blocks builder is that it requires an
environment configuration change to ensure that the GCC ARM compiler is pointed
towards arm-none-eabi. With the makefile there is no longer a need to make
sure code::blocks is configured properly before building.
Added PWM capability for testing a circuit requiring a square wave