introduce the abstract Delegate class

The Delegate will be the base of every class that needs to communicate
with Neo4j’s client including transforming models into Nodes and
keeping hold of the database connection and other most common Neo4j
functionalities.
introduce the Finder class

This class is responsible for querying the database in the most common
forms and translating Relationships and Nodes back to their
corresponding instances of Edges (in, out) and Models respectively.
make the abstract Edges\Relation inherit Delegate and use Finder

With the introduction of the Delegate and Finder classes they have
taken most of the hassle of dealing with the database client and most
common tasks away from Relation. Also introduce new functionality in
Relation that stores and returns Parent and Related models of the
relationship.

This commit closes an issue where setting a relation on the inheriting
class does not properly set all the aspects of the relation including
Start and End nodes, Related model and its attributes and database
connection.
make the HasOneOrMany relation use Finder
replace strtolower with mb_strtolower for UTF-8 support
implement belongsToMany relationship!

With this implementation we now have many-to-many relationship support
through the belongsToMany relationship, with the ability to attach(),
detach(), save(), sync() and much more.
update attach() condition for returning single edge

A single edge should only be returned when the given $models is not an
array, be it a single Model or id, whenever an array is specified the
returned will be the Collection of edges.
set the connection for the $model from itself in Eloquent\Builder
implement and test eager and dynamic loading belongsToMany