Clear Graph Visitors

Summary:
Implementing Visitors was totally pointless and added an other complexity
layer. Now, we have an easier API to modify Graph/Rule/Node:

2 printers:
 * void printGraphMakefile(Graph const&, std::ostream&);
 * void printGraphGraphiz(Graph const&, std::ostream&);

1 updater:
 * void updateGraphTimestamp(Graph&);

Not using visitor make the update Graph by timestamp algorithm much easier to
write and much faster:
 -1- update the timestamp of each node
 -2- if the rule is not already dirty then
   -a- compare every input with the oldest ouput. If the input is newer, then
       mark the input dirty and continue to update the input.

The old method had a complexity in O(n + m*n) (n = number of nodes, m = rules).
This new one is in O(n + m*log(n)).
In a local, I got ~50ms better to generate the Falcon graph and update the state
by the timestamp method (average of 10 executions of './falcon -M dot' command).

Test Plan: rule it!

Reviewers: adrienconrath

Reviewed By: adrienconrath

Subscribers: NicolasDP

Maniphest Tasks: T15

Differential Revision: http://91.121.199.76/D42