Bring over the JobQueue changes to add a sync, as well as async, queue s...

Bring over the JobQueue changes to add a sync, as well as async, queue system.

Will want this to replace my hacky GPU job queue from the gas-giant-gpu branch.

@robn what's this? A Pull Request? Erm, yeah, quite a few big changes in here due to needing the split queues so I've checked that it compiles and runs in Windows but just wondered if you could give it a once over and check it builds in Linux and also isn't completely fucking retarded... 'cos it's been a loooong day today.

Also I changed some things to `GetSystemPath()`, when I think I should have standardised the other way to `GetPath()` but ... looooong day.