anchor.diff:  Choose Step
   ~~~~~~~~~~~
   
  -The `choose()`-step (*branch*) allows for the current traverser to select which traversal branch to take. With `choose()`, it is possible to implement if/else-based semantics. The first set of examples below provide information about the vertices of the graph so its easier to understand the `choose()` examples to follow.
  -
  -[gremlin-groovy,modern]
  -----
  -g.V().has(label,'person').values('name').map {[it.get(), it.get().length()]}
  -g.V().has(label,'person').filter {
  -    it.get().value('name').length() == 5
  -}.in().values('name')
  -g.V().has(label,'person').filter {
  -    it.get().value('name').length() == 4
  -}.out().values('name')
  -----
  -
  -Given the facts above, the following examples show how to use `choose()` to select the values.
  -
   image::choose-step.png[width=700]
   
  +The `choose()`-step (*branch*) routes the current traverser to a particular traversal branch option. With `choose()`, it is possible to implement if/else-based semantics as well as more complicated selections.
  +
   [gremlin-groovy,modern]
   ----
   g.V().has(label,'person').
  -      choose({ it.value('name').length() == 5},
  -               __.in(), out()).values('name') <1>
  +      choose({it.value('name').length() == 5},
  +        __.in(),
  +        __.out()).values('name') <1>
   g.V().has(label,'person').
         choose {it.value('name').length()}.
           option(5, __.in()).
  -        option(4, out()).values('name') <2>
  -----
  -
  -<1> If the predicate is true, then do `in`, else do `out`.
  -<2> Use the result of the function as a key to the map of traversal choices.
  -
  -However, note that `choose()` can have an arbitrary number of options and moreover, can take a anonymous traversal as its choice function.
  +        option(4, __.out()).values('name') <2>
  +----
  +
  +<1> If the predicate is true, then do `in`, else do `out` (i.e. predicate-based option selection).
  +<2> Use the result of the function as a key to the map of traversal options (i.e. function-based option selection).
  +
  +However, note that `choose()` can have an arbitrary number of options and moreover, can take an anonymous traversal as its choice function.
   
   [gremlin-groovy,modern]
   ----
  
positive.code: link:http://en.wikipedia.org/wiki/Functional_programming[Functional languages] make use of function composition and lazy evaluation to create complex computations from primitive operations. This is exactly what Gremlin `GraphTraversal` does. One of the differentiating aspects of Gremlin's data flow approach to graph processing is that the flow need not always go "forward," but in fact, can go back to a previously seen area of computation. Examples include <<repeat-step,`repeat()`>> as well as the `back()`-step (*map*).
  
  [gremlin-groovy,modern]
  ---
  g.V().out().out()
  g.V().out().out().path()
  g.V().as('x').out().out().back('x')
  
negative.code:         option('josh', values('name')).
          option('vadas', valueMap()).
          option('peter', label())
  ----
  
  The `choose()`-step can leverage the `Pick.none` option match. For anything that does not match a specified option, the `none`-option is taken.
  
  [gremlin-groovy,modern]
  ----
  g.V().has(label,'person').
        choose(values('name')).
          option('marko', values('age')).
          option(none, values('name'))
  ----
  
  [[coin-step]]
  