git test: don't fail in unconfigured envs

git commit fails when user.name and user.email aren't set. Unfortunately
using git commit --author='Test Test <test@example.com>' doesn't work.

This could happen in environments where pristine users are used to build
software.

This patch is public domain.
configure: exit with code != 0 on error

Using this allows other software to check whether configure was
successful.

This patch is public domain.
Specifically call platform’s tsort.

This fixes issue #102 where user has a ‘tsort’ not supporting the ‘-q’ option in his PATH (before the platform version).
Extract Bundle menu to a framework
Add bundle menu to the status bar
Fix leaking bundle menu delegates
Fixed Grammar Mistake.
Fix issue #44 (CJK input)

We have our own version of interpretKeyEvents: because we want to augment the default key bindings dictionaries (and support multi-stroke key bindings).

When there is marked text (as part of inserting CJK or similar) the system’s version of interpretKeyEvents: seems to handle key bindings slightly different, for example where ↩ is normally bound to insertNewline:, this might be suppressed when the user has just selected a “translation”.
Checkin release notes
fixup! Use SecItemCopyMatching instead of the deprecated SecKeychainSearch

The cf::wrap function returns a temporary object that can be converted to a CFType, but this object’s lifetime is that of the temporary object returned. By putting the result of cf::wrap into a C array we keep the CFTypeRef around longer than the temporary object.
fixup! Turn private run_cmd (scm/utility.h) → io::exec

Forgot to update debug variable.
Another CJK fix

When invoking an action that would replace the marked text (“CJK edit buffer”) with a zero-length string, we would continue to be in “CJK” mode and thus allow the input manager to process the next key press.

In this situation though pressing e.g. escape or backspace would result in the input manager inserting the literal character code for this key.

So we now leave “CJK edit mode” if the “edit buffer” is empty.

There is still an issue though where, if the edit buffer is not empty, and the user press backspace, we correctly (?) ask the input manager to handle this key press, but the input manager will (wrongly) replace the selection with the literal backspace character.
Set a blank SDK path if the 10.7 SDK isn't found.

This allows the project to build with the system default framework/include/library paths.
Draw tab triggers and key equivalents in menu

The old techniques used to set key equivalents no longer work. Unfortunately, this technique is only a workaround and is not pixel-for-pixel identical due to the way NSMenuItem lays itself out when rendering a key equivalent; but I think it's the best that can be done for now.
Make proxy setup URL specific

We now bypass the global proxy if trying to connect to localhost (as some of our tests do) and we also hand the actual target URL to the potential proxy auto configuration (PAC) script.
Revert "Accept HTTP/1.1 response in network tests"

Since we bypass the system’s proxy for localhost, no-one should modify our test server’s response.

This reverts commit c98bc92b5d935ce07ec8a87df626e92df711ec38.
Improve variable names
Consecutive deletes extend the yank clipboard

This turned out to be a little more involved due to how we need to make a distinction between a forward delete (prepend) and backward delete (append).

Implements issue #118.
Crash when searching a bogus path

If we set projectDirectory to a non-path (e.g. ‘dummy’) then that value makes it into the default folder to search (on ⇧⌘F). Since we want folder specific settings for the path we are about to search (include/exclude patterns) then we would ask for settings for a non-path, which the settings framework couldn’t handle (it kept asking for the parent of this non-path expecting to eventually get to either the user’s home folder or the root of the disk, but instead it would loop infinitely).

This fixes issue #19.
Add path::is_absolute.

This is actually not entirely trivial since we can have a path that starts with a slash but includes more ‘..’ components than there are actual directories in the path.