Day 37 Part 3 - Complete P99.crossword; bug with eliminate chosen word

The bug has to do with us forgetting to eliminate a chosen word from the
candidate words set of other vertices of the same length that have not been
fixed with a word.

Signed-off-by: Pang Yan Han <pangyanhan@gmail.com>
Day 37 Part 4 - Change P99.Graph.rmWordFromSameLenVertices to use wordLen -> Set[Int] map

Each time we construct a new Graph, a Map[Int, Set[Int]] is created that
maps word length to a set of vertices with that word length.

This should slightly reduce the number of vertices scanned, at the expense
of extra time constructing the map.

Signed-off-by: Pang Yan Han <pangyanhan@gmail.com>
Day 37 Part 5 - Allow reuse of wordLenVertexMap in Graph constructor

Now, the wordLenVertexMap is only built if either nothing or Map.empty
is supplied as the third argument to the Graph constructor.
Otherwise, the Map supplied is used as the wordLenVertexMap, which
saves the need to rebuild it on each new Graph construction.

The tricky part is to remember to create a new map in the Graph.addVertex
method.

Signed-off-by: Pang Yan Han <pangyanhan@gmail.com>