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).
I am not 100% sure, but IIRC most of the structs/pointers returned by PS Move API are API-owned, meaning that the caller doesn't have to free the struct. I wonder if it makes sense to store the pointer inside PSMove and reuse it on subsequent calls and free it when the device is closed? This would also mean that when calling this multiple times, no allocation has to be done (only the first time when it's used).