Add asynchronous texture loader

2D gfx are still loaded synchronously since libRocket relies on that to get pixel dimensions