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.