Ensenso improvments

* Add `tcp_open_` and close TCP port on destruction

* Added as much const qualifiers as possible

* Small formatting and doc updates

* `grabSingleCloud` can only be called when no device is running

* `camera_` wasn't public while `root_` was, it's easier for the user to access the `camera_` parameters now

* Added more transformations function needed for the extrinsic calibration code

* The extrinsic calibration code has been tested and works, I didn't get good results for the moment but it most probably the data that is not good (not the code implementation).

* The image capture callback allows the user to display the images from the camera using VTK/OpenCV, as is, you can't collect clouds + images at the same time (the Ensenso API makes this possible, the PCL implementation doesn't). Maybe I'll add another callback for this later (I'm not sure it's very useful)

I have successfully displayed the 2 (left + right) images using the callback + OpenCV or VTK but I have problems with `pcl::visualisation::ImageViewer` (VTK6 + other bugs..)
I think it's best to wait for the `ImageViewer` to work properly before posting an example.
I didn't know `std::pair` existed before you mentioned it.

Yes some do; some use [FrameWrapper](http://localhost/classpcl_1_1io_1_1_frame_wrapper.html) but it doesn't meet my requirements because I can't specify the image type. Some others use custom formats.

`std::vector<float>` is the type returned by the Ensenso API. Note that this allows to easily [encode the image to PNG](https://github.com/PointCloudLibrary/pcl/blob/master/io/src/libpng_wrapper.cpp#L83).

I could convert the images to unsigned char arrays, it's supported both by VTK / OpenCV:
```
  unsigned char *l_image_array = reinterpret_cast<unsigned char *> (& ( (*images)[0][0]));
  unsigned char *r_image_array = reinterpret_cast<unsigned char *> (& ( (*images)[1][0]));
```

Not sure if we have to do this conversion or not.