Add Grammars and use them for building queries

Implemented the CypharGrammar components for selecting records with
wheres, properties and returning nodes as Eloquent models.
Implement running queries against the database

Connection will call the CypherGrammar to build the Cypher query string
in cooperation with the Eloquent Builder.
add some remarks to readme
add the ability to specify a component to compile

Sometimes we might need to specify and compile a single CypherGrammar
component so that we do not duplicate the process.
remove unnecessary columnizing check since it will always be an array
add the 'id' as a column to check in the Grammar when parameterizing

The Neo4j client have the ability to replace properties b/w { } with
passed values. We’ve already implemented a way to replace the id(n)
that is treated differently by Neo4j to get a node by its ‘id’, but
when the dev decides to fetch the ‘id’ within specified columns i.e.
User::first([‘id’, ‘name’]), this also has to be treated differently
through the Client so this commit does it :smile:
revamp the way columns are assigned as properties

Previously we were extracting the properties from the query itself
(matching what’s b/w { }) which is unreliable since it is based on no
order specified and may cause issues like replacing [‘id’ => 1,
‘updated_at’=>DATE] with [‘id’=>DATE, ‘updated_at’=>1].

In this commit we modify the way bindings are added to be in the form
of a [‘key’=>’value’] that way it’s impossible to mismatch the value
and the key.
implement updating a node

This commit implements the update of a node yey!