Create AbstractStateSpaceExplorer #54

* Implementations of StateSpaceExplorer can now extend this
* Contains all shared code
* Subclasses just implement the stateSpaceExploration method since this
  is all that differs
Add MassiveParallelStateExplorer #54

* Allows for threads to process n states at a time and then combines
  their results.
* Duplicate work is ok because it is so small compared
* CachedExplorerUtilities is used by multiple threads so the cache is a
  concurrent map
Comment up methods
Implement very basic ExploredSet Collection #54

* ExploredSet uses 'CompressedExplorerState' which uses two different
  hash values to determine hashcode and equals.
  Use md5 for place in set and sha1 for equality
* Adds a bit of speed but parallel is yet to still be *alot* faster
  Only tested up to spaces of 250,000 though
Dont use ExploredSet yet it has a bug & fix bug in processing #54.

* It is possible that due to one or more threads being allowed to
  explore the same states in a given loop, this transition
  will get written twice. Therefore bundle up the transitions to write
  out later.
* Only add a state to the explored queue if there are no registered transitions
  from it due to the previous round
Commiting code before making changes.

* Current code to only write transition if not in current list
  is not working
* Going to try two lists seen and explored
Make MassiveParallelStateSpaceExplorer inner class non static #54

* This makes it easier to reference the outer-class data structures
Reset the writer after call to transition #54

* The ObjectOutputStream is storing a copy of each object for quicker
  writes but we're running out of memoery quite early.
* Perhaps later a better idea would be to not serialize objects but
  just write a string version
Change state structure to use Multimap and remove Token class from Map
entry in Place & Arc fixes #53

* This commit contains a bit too much stuff, sorry
* Now use String as id in map, much better because its an immutable object
* Replace Map<String, Map<String, Integer>> with Multimap<String, TokenCount>
* Make sure all unit tests pass
* For #54 we need to pass in an ordering to generaate hash codes
  for states in to the ExploredSet ctr. This is because maps
  may have different orderings of the places and so this was causing
  bugs in the implementation
* Add clear to the writer interface