Implement support for a multitude of ALPS drivers and refactor to share code

So I did a major overhaul on the ALPS driver and ported over the Linux driver. It should now support all ALPS models that the Linux driver supports. I have tested it is working on my ALPS touchpad and have confirmation from another user as well with a different model.

I also did a refactor so that I could pull out a lot of common code to share.

I liked your implementation and code so I based my implementation on your stuff. I also though it would be great to be able to have a single kext to support multiple touchpad vendors.

Anyway, let me know what you think. Hopefully it will work out and I can help maintain the ALPS driver.