[SPARK-2374] Path pattern matching for GraphX

Based on a [request](http://apache-spark-user-list.1001560.n3.nabble.com/Graphx-traversal-and-merge-interesting-edges-td8788.html) on the mailing list, I wrote a simple implementation of path pattern matching for GraphX. It accepts patterns in the form of sequences of edge matchers, then iteratively propagates partial pattern matches to find all matching paths in the graph.

Though this is only an initial implementation and there are many opportunities for optimization, having this algorithm in the library expands the scope of GraphX beyond ML-like algorithms into graph traversal.