Small graph API to track vertices and edges added to graph
Oh wow... I figured out what was going on. In the GraphInstantiater method, the very first call which passes synMap.keys, keys returns an iterable[Int]. Looks like taking tail on this is a long process, most likely going through the whole set of keys each time. 

changing the call to 

val gr = vertexAdder( synMap.keys.toList, new DiGraph[Int]( Map() ) )


made everything go faster. Does anyone know what is the underlying implementation of the container returned when you call keys on a Map ?