Add Ensenso support

If you want to test please read [the tutorial](https://github.com/VictorLamoine/pcl/blob/ensenso/doc/tutorials/content/ensenso_cameras.rst) first. For the last steps you will, of course, need an Ensenso device!

- The Ensenso grabber has been written like the OpenNI grabber class
- The code contains 2 examples, with/without the Ensenso grabber class
- The code is documented
- Support for Windows has not been tested
- A tutorial has been written to explain how to use the Ensenso in PCL

[pcl-developers topic](http://www.pcl-developers.org/IDS-Imaging-Ensenso-td5709495.html)
I read the old code once again, and it's even more strange that it seemed to me in the beginning. So what actually happens is that `camera_` is a shared pointer. You allocate some memory for camera object. Then in the commented line you do a complete copy of an object that `root_` owns into that memory. So starting from this point in time the objects pointed by `camera_` and `(*root_)[itmCameras][itmBySerialNo][device]` are different. Therefore when you do `reset()` on the `camera_` it works, that is, it frees the memory previously allocated for the cloned object. At the same time it has no effect on the object in `root_`.