LRU cache implentation using a hash table and a double-linked list.

Average retrival time (with pre-computed hashes) is around 3e-6s.  If that proves to be too slow there might still be micro optimizations to do, but the algo is probably as fast as it will go.
Use the cache in cuda_extcopy().
Apparently to avoid a massive slowdown we do need to create the event without the CU_EVENT_BLOCKING_SYNC flags.  I've made it conditional on GA_CTX_MULTI_THREAD for now, but we might avoid it entirely if the cost is that great.

I'd rather burn a few CPU cycles to spin while waiting for an event than have the whole program take 2x the time to execute.
Merge pull request #10 from abergeron/add_cache

Add cache for extcopy