This adds a cliff sensor to the 2d navigation stack with camera

This adds a new sensor input, cliff_sensor, which is basically points below a certain threshold below the floor projected towards the camera into the ground plane and then elevated to be slightly above the floor. This enables them to be cleared by observing a ground plane below (that is not below the threshold), something that is probably necessary to deal with sensor noise.

We have done tests with 3 different stairs of 2 different types and the robot picks them up and doesn't plan down them. For the deployment at AAF, it would be good if Tomas and Michael can test with the stairs there. Look at the local obstacle map and see that there really are obstacles there and see if the detected stair points are in `/move_base/points_cliff`.

I've added a new node, `mirror_floor_points`, which basically does all of the dirty work, it separates the points below from the points above and reprojects the points below to the ground plane. It then publishes these two as separate topics, `/move_base/points_clearing` and `/move_base/points_cliff`. This doesn't seem to have a big influence of performance as it's taking up ~2% CPU on our robot.