Fix that JobHandles were not removed from JobSet.

During some ongoing tries to unify ```Sector``` and ```StarSystem``` caches (don't ask ;)), I noticed a bug in the Jobs implementation:

The ```JobHandles``` were not properly removed from their ```JobSet```, because the pointer to the ```Job``` was used as a key, but when trying to remove a ```JobHandle``` it was already tried with ```nullptr``` as a key (the ```JobHandle``` had to be cleared before removing it from the ```JobSet```, so ```JobHandle::m_job``` was always ```nullptr``` at that time). So, a ```JobSet``` would accumulate "empty" ```JobHandles```. Not really critical, but not nice, either.

I solved that by giving ```JobHandles``` a unique ID and making ```JobSet``` a real set based on this ID.

I wondered, if ```JobHandle::s_nextId``` should be atomic, but I think it can only be used from the main thread, so made it a normal variable.

@fluffyfreak: You're a bit familiar with that code. Could you give it a short look, please (and while you're at it try to compile with MSVC, though there shouldn't be anything problematic in there ;)).