Update ply_io.cpp

Reading a binary PLY file with faces and "vertex_indices" property crashes, if only a PointCloud is provided. Since the polygons_ member is set to 0 and untouched otherwise.

Worked in PCL 1.6, doesn't work right now with 1.7.1.

The ply2pcd sample program provided with PCL crashes as well.
Fix some whitespace issues
Use flags to check whether member variables have been set

For the person classifier a flag has already been used, but for the
intrinsics matrix and the ground coefficients, data structure specifics
are used in order to determine whether or not the variable has been set.

Since not all data structures have such a specific characteristic,
(e.g. in one of the next patches we introduce a transformation matrix
for which it can't be easily checked whether it has been set or not),
and for consistency, it is better to use flags throughout the whole code.
Fix wrong update of min_points_ and max_points_

The update of min_points_ and max_points_ happens every time the compute
method is called. If voxel_size_ is different from the standard value of
0.06, for each call to the compute method, min_points_ and max_points_ are
getting smaller (for a voxel size > 0.06). After a couple of iterations,
they are equal to zero.

It is better to set min_points_ and max_points_ outside of the compute
method, since there is no need to recalculate them every time. In
addition, min_points_ and max_points_ depends on internal knowledge of
the people tracker (the voxel_size_ and the fact, that there is only one
point per voxel after downsampling). For a user of the people tracker,
the only thing that should matter is the height and the width of a person
cluster. The cluster limits can be deduced from this information.
Move point cloud filtering in own method and make it accessible

In the next patch, the filtering method will be extended. In the future,
it would be desirable to have all computing steps in the compute method in
separate methods, but for the moment we limit ourselves to the filtering.
Allow to set the field of view of the point cloud

In order to be able to cut off outliers, the z-dimensions of the field
of view can be set from outside the people tracker. If there is only a
single outlier, it might not be able to filter the point cloud due to
a lack of memory.
Add transformations for the point cloud/ground plane/intrinsics matrix

The choice of the coordinate frame matters for the people tracker
(e.g. for the height calculations), and it is important to allow for
different choices of coordinate systems. Doing the transformation inside
the people tracker leads to a better performance than doing it outside
(since it can be applied to the downsampled point cloud), and also
simplifies the use of the people tracker.
Replace hard-coded value by constant
Increase distance for ground removal

For outdoor environments  (curbs, stones, uneven sidewalks, ...), it is
necessary to have a higher tolerance.  The people tracker still seems
to work fine with this higher value in indoor environments.
Reduce computation time for bilateral upsampling.

Compute the distance values (exponential functions) in advance to reduce computation time.
Add: approximate version of the progressive morphological filter

This version is closer to the original paper and significantly faster,
computing the morphological operations on a 2D grid.
Moved computeRoots2 implementation into hpp
Moved computeRoots implementation into hpp
Moved eigen22 implementation into hpp
Moved computeCorrespondingEigenVector implementation into hpp
Moved eigen33 implementation into hpp
Moved invert2x2 implementation into hpp
Moved invert3x3SymMatrix implementation into hpp
Moved invert3x3Matrix implementation into hpp
Moved determinant3x3Matrix implementation into hpp + missing documentation written