Ability to Transpose data in Shiftr.

 Fixes #91 #108

 Added to the '@' wildcard functionality to allow for data lookup in the input tree.
 - Example :
   input : {
    "data" : {
      "key" : "penguins",
      "value" : "fish"
    }

   spec : {
     "data" : {
       "@value" : "@key"
     }
   }

   output : {
     "penguins" : "fish"
   }

   This will pull values from the "data" Map, from the "key" and "value" keys.
 - Complex paths after the '@' can be embedded in a parenthesis
   - Example : "@(path.to.data.down.the[2].tree.&(1,1))"
 - Note : The "path" after an '@' can not contain any '*' wildcards.

 - Cleaned up the Parsing of PathElements for Shiftr.
 - Refactored the WalkedPath so that it can contain a pointer to the input from each level

 - For Transpose, the ability to coerce a Boolean into a String of "true" or "false".
 - Ability to specify a String value on the LHS by using the # operator.
  -- Compelling usecase is transposing a boolean into more useful String values.

 Also, added to the '#' operator so that values from the spec can be written directly
  to the output.  This was possible before, but required two passes thru Shiftr.