Generalize handling of extension devices

Since my request for discussion of this topic on the mailing list was not as fruitful as I hoped, I figured it would be best to just whip up a basic implementation of a more flexible EXT handling.

This has no fancy plugin-like interface and I am not sure we need that. The downside is that the application is completely responsible for interpreting the unprocessed data that it is handed by the lib. It would probably be nice to wrap this in some kind of EXT module of the lib, at least for the offical extension devices (currently only Sharp Shooter and Racing Wheel, at the moment of writing).
Bring Your Own Buffer works for me, feel free to change it to passing a pointer to a user-allocated PSMove_Ext_Device_Info. We then have to commit to not changing the size of that struct (for binary compatibility), as the user-allocated buffer cannot grow, obviously (it will be fixed at compile time).