Fix for issue 311

I converted to using a regex to parse the path expressions. The existing logic would tokenize foo.[bar.baz] as foo, [bar, baz] instead of foo, [bar.baz].  I pulled the parsing out into a separate class mainly for unit testing purposes and made the class package private.