Add support for custom hardware cursors

The expected cursor data format is ARGB (0xAARRGGBB in memory.) The SDL2 implementation needs to be fixed and the rest need to be tested more thoroughly.