New (native) commit window

This is based on the previous commit window code base. It replaces the NSTextView with a OakTextView for entering the commit messages. This allows us to take advantage of some of the git grammar features, e.g., fixup!.

If other SCM bundles are updated in the future to include any specific grammars, these can be used in the commit window by setting the bundle grammar to "text.SCM-commit", where SCM could be hg or svn for example.

Changes to note:

	*  The Modify row button for the "--action-cmd" commands are now implemented in the action menu and the table context menu.

	*  The shortcut for committing is now ⌘S.

	*  The shortcut for cancelling a commit is now ⌘W.
Enable new commit window
Get the key window when performing bundle item actions

OakCommitWindow is an NSPanel and therefore cannot become the main window, so bundle actions could not be performed via the bundle menu. Also, we avoid casting it explicitly as a instance of DocumentController for clarity.

This change should be safe since other NSPanels (e.g., Find) do not respond to performBundleItem and it was being handle as a generic id anyways. E.g, bundle actions performed via the menu behave as expected for the BundleEditor, which responds to performBundleItem when the OakTextView is in focus for that window.
Teach OakCommitWindow performBundleItem

This is necessary for instances where OakTextView may not be in focus.
Change OakCommitWindow from NSPanel → NSWindow

This allows other panels (e.g. find dialog and clipboard history) to interact with the OakTextView in the commit window.
Terminate connection and event loop instead of calling exit()

I got an exception (from TextMate) about the connection disappearing while waiting for reply.

We now release the connection after exiting the method and gracefully exit the program after having completed another event loop cycle.

It’s not really clear if this is enough to satisfy distributed objects — perhaps we should just use sockets…
Remove unnecessary test, for no matches we get an empty array
If “which «tool»” failed we would effectively return nil

The ‘nil’ result is because stringWithCxxString: called with NULL_STR returns nil. The code did not look like it was supposed to return nil for failure, and the code which uses this method assumes that it always succeeds, so I made it return the original path. The advantage of that is that the error sheet which appears (brought up by the calling code) will show the full command line, which thus will include the shell command that ‘which’ could not find via PATH.

Ideally though the method should return nil and the caller should be prepared to handle that.
Do a proper LRU history for commit messages

The previous code had the advantage of being O(1) instead of O(n) but the user might not expect that selecting an old commit messages moves the last recently written message.
OakCommitWindow is not a public class
Minor whitespace/alignment issues
Rework command execution (diff, revert, etc.)

I wanted to get rid of calling /usr/bin/which but ended up also modifying the methods that used the absolutePathForPath: method.
Explicitly specify our link dependencies
Change Commit button’s key equivalent to ⌘↩

Also remove key equivalent from the cancel button (⌘W) since File → Close works as cancel (and this is the action a user would expect ⌘W to call).
Set NSMiniaturizableWindowMask for commit window

This is useful e.g. after showing a diff from the commit window.