Cleaner approach to things related to stores and queries

* got rid of the Free[Command]
* RDFStore is now a typeclass
* it is made of 3 three independent ones: GraphStore, SparqlEngine, Transactor
* there is an additional Lifecycle typeclass for start/stop operations
  * it comes with a default instance doing nothing
* syntax enhancement are made available from within the typeclass themselves
given that executeAsk and executeConstruct and executeSelect in this implementation all are blocking, the return value of a Future is pretty misleading. This suggests that the signature of `SparqlEngine` should not be `trait SparqlEngine[Rdf <: RDF, A]` but rather something like
```scala
SparqlEngine[M[_]: Monad, Rdf <: RDF, A]
```
So that in the case of Jena the SparqlEngine can be
```
class JenaSparqlEngine(ops: RDFOps[Jena]) extends SparqlEngine[Id,Jena,URL] {
   def executeAsk(endpoint: URL, query: Jena#AskQuery, bindings: Map[String, Jena#Node]): Boolean = ...
   def executeConstruct(endpoint: URL, query: Jena#ConstructQuery, bindings: Map[String, Jena#Node]): Jena#Graph
   ...
}
```