move mutation parsing to separate functions and support morph

The method getModels in Eloquent Builder has grown too large to be
difficult to maintain and the functionalities that it was performing
are a bit too many so we split them in methods that mutate results back
into the correct models and introduced the support of Morph mutations
alongside some accessor and helper methods.
add hyperFirst method to Edges Finder

The idea behind this method is to get the left and right side edges of
a HyperEdge.
implement HyperEdge

This edge holds two edges inside of it, and is not a *light model*.
enhance the base Edges Relation with accessors

Add convenient accessors for the $parent and $related models of a
relationship and move the Finder initialization to the constructor
since it will be used almost in every edge.
fix an issue in the BelongsToMany relationship

Whenever the mode Id was given as a single value (not array) to the
detach() method it would fail miserably. Also remove useless extra
arguments to addManyMutation for the same method.
modify the return of OneRelation's getEagerModelKeys

In some cases 0 can be an Id for a node so we’ll just return an empty
array() instead.
add support for Morph relations in Query Builder
implement the Cypher for the MorphTo relationship

Now we route to the method that has the name prepareMatch[type] where
type is the Match type that we’re dealing with so if we’re dealing with
a MorphTo the method prepareMatchMorphTo will be called.
fix an issue witch checking for an id greater than 0

In some cases, specifically occurred when testing on Travis, an id of 0
apparently could be a valid Id for a Node in Neo4j so we now check for
it being greater than or equal to 0.
add a flush to TestCase

This flush will run on the tearDown of every test when they call
parent::tearDown() and will flush the Neo4j instance from all nodes and
relations (not labels though).
implement and support hyperMorph relation
implement and support MorphTo relation
implement and support MorphedByOne relation
implement and support MorphMany
replace strtoupper with mb_strtoupper in Model
update the way morph ids are identified to make morphs work
add tests and docs for Polymorphic Relations

Add the tests that have been written throughout the implementation of
Polymorphic Relations and the README docs and instructions on how they
apply to Graph.