breakout PathExpression into separate types; work on implementing resolve and dependencies