Move firing strategies into the arcs #56

* Arcs take a map of the current state of a petri net and return
  true if they could fire for that given state
* Create InboundArc and OutboundArc abstract classes and implement
  Inbound & Outbound normal strategy and Inbound Inhibitor strategy
* Program to the two new arc abstract classes
* Remove old ArcStrategy code
* Petri net now stores inbound and outbound arcs seperatly which wokrs
  well for methods where we wish to know the type of arc we are dealing
  with
* Unit tests pass
Create an AnimationLogic that aims to perform stateless calculations #56

* The PetriNetAnimationLogic class performs stateless calculations using
  the new arc logic
* Create a new state class for pipe-core that just contains a map of
   place name to token counts
* Rename pipe-module State to ExplorerState and wrap the State in it
* PetriNetAnimator now uses PetriNetAnimationLogic under the hood
* All unit tests pass