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)
The order of evaluation is as follows:

`root_` : pointer
`*root_` : pointee
`(*root_)[itmCameras]` : operator[] of the pointee
`(*root_)[itmCameras][itmBySerialNo]` : operator[] of the object returned by operator[] of the pointee
`(*root_)[itmCameras][itmBySerialNo][device]` : operator[] of the object returned ....
`&((*root_)[itmCameras][itmBySerialNo][device])` : address of the previous thing

The error suggests that the last `operator[]` returns a temporary. If this is indeed true then the designers of Ensenso driver wanted us to actually copy the object. This will further mean that your original approach was almost correct. Then just turn `camera_` into plain object rather than pointer to object.