CUDA-OpenGL interop: Drastic performance improvements.

Now the memcpyCudaOpenGL mex file implements a resource
cache with LRU replacement strategy. OpenGL resources are
no longer registered and unregistered with CUDA on every
use. Instead they're registered once and stored in the cache.
Subsequent use uses the cache to avoid additional (un)register
cycles. The cache also keeps track of (un)mapping of resources,
so that certain applications can reduce the number of (un)maps.

This leads to speedups anywhere between 5x and 10x for the
resource sharing, depending on use. It allows to achieve over
90% of the theoretical data sharing bandwidth.

The mex file now also allows to access the memory/array pointers
for mapped resources, so that low-level C-Cuda code could avoid
data copying and operate directly on shared resources.

Now sharing of pixelbuffer object (PBO) resources is also supported,
but not much tested.

Various other minor improvements. The GPUTypeFromToGL.m M-File
wrapper has been adapted and tested.

-> Confirmed to work very well on Linux. Data exchange times with
   GPUmat for single precision 4-layer RGBA 32 bpc float textures
   of 1024 x 768 pixels in size are ~ 1 msec, ~ 0.5 msecs best case
   on a old NVidia GeForce-8800 Ultra running under 64-Bit Ubuntu
   Linux 12.04.1 LTS.