Clean up behaviour on repositories with no commits

I added additional tests to better cover #push and #pull.
(Note: I suspect that more test would probably be appropriate for the other
methods. However, they should largely never be called on a repository with
commits so assertions maybe the appropriate way to document this.)

In order to clean up some exception throwing in Repository#push:
* avoid trying the push if there are not local commits
* I use #current_oid instead of @rugged.head.target directly. This
  returns a nil for an empty repository instead of throwing an exception.
Improve pre-commit working directory change check

It seems that the Rugged commit method does a lot of writing to disk
even if there is nothing to commit. This is a performance problem both
for the file system itself, and because this triggers additional file
system notifications which can overwhelm the dameon.

The Repository#push method will now check to see if the working directory
is dirty, and only execute a commit when necessary.
Bump version to 0.5.0.pre4 and update change log
Rugged/Grit pull conversion

Update the related tests to check conflict files in more detail.
The error handling test also needed to be adjusted, and mocks raising
the appropriate exceptions instead of trying to craft a failing
situation.

Also extract the remote_branch lookup into a private method.

Also, also increased the Grit timeout to 120 seconds, to allow for slow
fetch operations.
Update the remote check to use Rugged

This removes the last direct shell call from the Repository, all git
commands should now be executed through either Rugged or Grit.

The shell_tools gem remains as a dependency because it is still being
used in some of the tests.
Remove old integration test now handled with Aruba

These no longer need to be maintained because we now have a more
thorough integration test through Aruba. Additionally, we can now
restructure the code without having to account for these tests.
Re-write empty directory tagging to use Find

Find is a module in the stdlib which will talk through a directory tree.
The code will now flag empty hidden directories in a repository while
correctly ignoring the .git directories. (The tests has also been
updated to validate this.)

I am hoping that this will also improve the performance during a commit
but that has not yet been proved.

Additionally, I also added a test helper method for creating directories
in the local testing repository.
Merge pull request #79 from acant/bug/extra_file_changes

Reduce the extra file changes, to improve the inotify performance.