major rewrite

- added a SHA object: I was confused too many times when to use a bin and when to use a hex sha, this object eliminates the differences
- added a GitPath object: this object converts a string into a path, exposes an easy API and checks the input for irregularities, like leading spaces, ... This object removes lots of checks from the original code
- modified GitObject:
  - removed public variables, now accessible by __set and __get magic methods
  - added lazy loading, an object is loaded when its properties are accessed
  - changed the way objects are instantiated, changed the gettypename and gettypeid methods
  - secures all properties when a SHA is calculated, you need to clone an object to make it writable again
- introduced GitPathObject, from which GitBlob and GitTree will extend
  - these objects are objects which have a mode and have a history
- modified GitTree object:
  - the object now exposes ArrayAccess to access all its nodes. Access is read AND write. Array access means you can do this:
    $blob = $tree[$path];
    this will fetch the blob at relative path $path in tree $tree; it replaces your find method
  - adding an object to the tree is as easy as: $tree[$path] = $blob;
    the object will create all missing tree nodes in the path by itself, it replaces your updateNode function and removes all the juggling with the array of nodes which updateNode returns. GitTree::write will take care of all newly created GitTree elements.

- modified GitCommit object:
  - a cloned GitCommit can be used to make a modification to the repository, see the code below as an example

        $branch = $repo->getBranch('master');
        $commit = new GitCommit($branch->getTip());

        foreach ($stash as $path => $data)
        {
          $blob = new GitBlob($repo);
          $blob->data = $data;
          $commit[$path] = $blob;
        }

        $formValues = $form->getValues();
        $stamp = new GitCommitStamp($formValues['author']);
        $commit->author = $stamp;
        $commit->committer = $stamp;
        $commit->setMessage($formValues['summary']);

        $branch->updateTipTo($commit);  // writes all changes to disk

- introduced GitBranch object:
  - this resembles a branch in the repository
  - it eases writing a new commit to the tip of the branch
  - it makes the API more clear
  - is maybe the place to test a new commit if it's a conflict commit, fastforward or tip
  - it's accessible by ArrayAccess
      $git = new Git($dir);
      $masterBranch = $git['master'];
  - setting a branch to a commit will save the commit as the new tip
      $commit = new GitCommit(...);
      $git['master'] = $commit;
      // the master branch is now updated to Commit $commit, the commit is saved

- I changed indentation and code style to the symfony guidelines, it's the framework I develop in.

TODO:
- testing the mode of GitPathObject
- testing the test for FastForward merge and creating conflict branch
- test GitTree::treediff code
- work out a bug on
- write docs & more unit tests
added a functional unit test for the Git class, lots of minor updates, code seems to work as alpha
updated tests, branch tree reading now works
fixed getHistory
GitCommit now 'decorates' the iterator aggregate and countable of a GitTree, minor fixes for the GitDemo on the blog
Changed to use autoloading.

Change-Id: Ia8e266ff02fdbae3ef59b7d5bef63527b1d486c8
Using namespaces.
Moved errors to different classes.
Ignored IDE files.
Moved to subfolder.
Updated readme.
Edited README.markdown via GitHub
Edited lib/Glip/autoload.php via GitHub
Moved autoload file.
Upadated readme.
Changed directory location.
Fixed namespace errors.
Fixed namespace problems in GitBranch.
Fixed Exception namespaces.
Made write to disk.