rewrite graph extender

The graph extender now uses plugable strategies to provide precursor
actions and properties providers. This allows better control over the
extension behaviour. Default implementations include basic provider
which essentially just delegate requests to a repository and collect the
results. More sophisticated providers compose actions so that they
satisfy as many requests as possible.
switch to Guava 17.0