Refactor NIF cache

 - Remove broken cache locking mechanism

This was supposed to unload NIFFiles after a cell transition completes, but it was never working due to a mistake on the line if (--sLockLevel), should have been if (--sLockLevel == 0). Repairing this would increase load times (NIF files would have to be reloaded more frequently), so just removed it for now.

 - Decouple cache from NIFFile (now a new nifcache component)

 - Add API for future background loading

 - Provide a reliable way (SharedPtr) to hold on to loaded NIFFiles. This will be useful to avoid deep copies of keyframe and text key data, which is currently a performance bottleneck.
Share keyframe data in NIF resource (Fixes #908)
Terminate AiPursue when target dies (Fixes #1836)
Fix being able to change camera during death via mouse wheel
Implement Light magic effect (Fixes #1122)
Use Chop attack when walking diagonally (Fixes #1729)