GraphEngine defines mutation functions

insertVertex, insertEdge

TBD what the image should be. Now we give back the engine entity wrapped
in maybe, so that we can determine failure, but maybe a simple Bool
would suffice? Yeah, there's no case in which the inserted vertex would
differ from the EngineVertex that was supplied, right?
GraphMutations monad defined, putVertex putEdge
insertVertex, insertEdge return the graph

Also removed runGraphEngine because it makes no sense for impure graphs
Language refactor; semantics changed

1. We use a special monad-list for our query results
2. We don't abandon the whole query in case of one anomaly, we just
   abandon that branch
3. We define GraphQueries, GraphMutations, and GraphPatterns which has
   injections for the former two.
Update graph of the gods example
GraphEngine has types for insertion data

The motivation: we can't ask the user to create EngineVertex/Edge
instances; we want the GraphEngine to be the only one capable of doing
this. Case in point: if an engine wants to generate its own identifiers,
how is the user to produce a valid EngineVertex/Edge for insertion?

So, the idea is to create an Engine(Vertex|Edge)Insertion datatype which
can be used, via insertVertex(Edge) to get an EngineVertex(Edge).
Vertex, Edge classes produce insertions
E and V types introduced to language prims
Update GraphOfTheGods example
Merge pull request #2 from avieth/aovieth/mutation/base

Introduce graph mutations