add compareTexts helper function
add depth_first_traversal algorithm

First traversal algorithm. The hook names discover and finish are
inspired by boost::graph.

There are still some open questions:

- the traversal algorithm has some of duplication because it has to
  support overloads. Is there a better way? (one solution would be to
  resort to preprocessor tricks or to boost::preprocessor).

- Should we support const ref overloads too?
implement printTransforms with a visitor

I checked that it does not impact compile time.
implement printState with a visitor
add is_ancestor tool

this algorithm helps when checking user input and can also
replace a part of deepest_common_body
implement backward traversal

The Node template argument is actually a Body type. But, in the future,
the Node type will know its parent, so it will indeed be a Node.
add brackward_traversal_prev

This traversal traverses the tree backward and provides the
visitor with both the Node being visited and the previous one.

It is needed for crba. Contrary to backward_traverse, this
algorithm does not visit the StartNode, because the "PrevNode" parameter
would not have any sense.
implement crba using visitors

I checked that it has no impact on performance.
implement rnea with a visitor

The implementation is rather contrived because we need to
differentiate between root bodies and others.

We could make it more simple by changing depth_first_traversal
so that visitors take two template parameters: Node and PrevNode
similarly to backward_traversal.

PrevNode would be the parent of Node. It would le us specialize
easily the case of a root node:

    template <Node, PrevNode> struct Visitor;
    template <Node> struct Visitor<Node, NP> {};

Yet this modification would not cover the child-less node special
case:

on can imagine that in a recursive algorithm, when visiting a node
some work is done to prepare the children visit. It would be great to
skip this work when the node has no child.
add deepest_common_ancestor

a rewrite of deepest_common_body to compare type instead of labels.
refactor jac_point_chain

move the core of the algorithm to jac_point_relative
and reimplement it using two visitors and using deepest_common_ancestor
instead of deepest_common_body
jac_point: move jac_point_robot in tools

because, contrary to jac_point it is only meant for tests and benchmarks.
replace jac_point with jac_point_relative

The jac_point algorithm is removed because jac_point_relative
covers its features.

jac_point_robot has been modified to use it instead. Benchmark shows
no hoverhead.
Remove warnings.

Please remove useless arguments in functions and methods.
jac_point_chain: assert that Robot::NBDOF>=6
add has_parent helper
use has_parent in crba
remove HAS_PARENT from models
remove tools/algos #includes from models

and the forward declarations too. It fix the performance regression
that came with the visitors implementation. The loss of performance
apparently did not came from the visitors themselves but from the fact
that I added the new algorithms headers and forward declarations
to the simple_humanoid and simple_arm.

It also explains why the generated models were not affected.

Before this commit

    $ nm build-release_brm/tests/libsimple_humanoid.so | wc -l
    962
    *************
    Model NBDOF : 35
        average execution time :
    jcalc: 2.15047µs
    bcalc: 2.84113µs
    rnea: 7.12577µs
    rnea (without jcalc): 4.60182µs
    crba: 7.74877µs
    crba (without jcalc): 5.2321µs
    jac_point_robot (without bcalc): 12.487µs
    *************
    Model NBDOF : 31
    average execution time :
    jcalc: 2.10052µs
    bcalc: 2.78628µs
    rnea: 6.21797µs
    rnea (without jcalc): 3.93645µs
    crba: 6.22656µs
    crba (without jcalc): 3.84575µs
    jac_point_robot (without bcalc): 8.04626µs

After this commit

    $ nm build-release/tests/libsimple_humanoid.so | wc -l
    778
    *************
    Model NBDOF : 35
        average execution time :
    jcalc: 2.10535µs
    bcalc: 2.8344µs
    rnea: 6.23657µs
    rnea (without jcalc): 3.90795µs
    crba: 7.65815µs
    crba (without jcalc): 5.25423µs
    jac_point_robot (without bcalc): 12.7603µs
    *************
    Model NBDOF : 31
        average execution time :
    jcalc: 2.09651µs
    bcalc: 2.78867µs
    rnea: 6.20554µs
    rnea (without jcalc): 3.95253µs
    crba: 6.09986µs
    crba (without jcalc): 3.86598µs
    jac_point_robot (without bcalc): 8.04133µs
move __attribute__ in a macro to fix the VS build