React editor compatibility

Fixes #11.

Test Plan:
Opened blame in both React and non-React editors, and blame appeared fine.
Also scrolled.
make selectors const
Merge pull request #12 from dmnd/fix-react-editor

React editor compatibility
prepare 0.2.4 release
Configurable ISO 8601 date format string

I don't like M/D/YY so wanted to change the format string. I figured the best
way to do this is to make it configurable. Also, I changed the default to be
ISO 8601 since I think this is what most coders will be used to.

Test plan:

 * Opened blame and saw it's now in ISO format
 * Closed blame
 * Went to config and changed it back to M/D/YY
 * Opened blame again and saw it reverted to old confusing format ;)
Resizable panel with reasonable default width

Some of my collaborators have long last names which makes a dynamic width
annoying. Because of this (and another reason, see below) I decided to
implement a static-width panel that's resizable.

This commit adds a resize-handle and some style tweaks to make things look good
at varying widths.

The other reason a static-width panel is better is because when blaming large
files in repositories with lots of history there is a noticeable delay before
the panel appears. It would feel much better if it displayed instantly, but
this is problematic in the current implementation because the width is unknown
until blame returns.

With a static panel width, the panel can react immediately to the keypress and
display a throbber to indicate blame is running. Then when blame completes, the
panel can update without resizing.

I haven't actually implemented instant display yet but I intend to.

Test Plan:

 * Opened blame, saw long names had ellipsis
 * Resized panel with mouse
 * Scrolled down and up, resize-handle still usable
 * Edited some lines and made sure 'no commit' lines look OK
Factor out .stretch() to mixins.less
Show first 7 characters of hash

Since the actual value of the hash isn't useful after some amount of bits, I
looked up how many characters GitHub uses in their UI. It's 7. If that's good
enough for them I think it's good enough for us too.

Test Plan:
 * Edited a line
 * Reloaded window,
 * Saw only 7 characters in hash
 * Saw only 7 hyphens in my edited line
Merge pull request #13 from dmnd/static-width

Resizable but static width panel
style tweaks
Remove special casing for duplicate gutter class

Atom removed the duplicate gutter class in ba21f0b0d8677583b33baa00d8282b3,
so there's no need to special case things any more.

Test Plan:
Opened git-blame in 0.117.0 and it worked
Fix typos
Merge pull request #16 from dmnd/patch-1

Fix typos
Merge pull request #15 from dmnd/remove-react-special-case

Remove special casing for duplicate gutter class
Rewrite gutter views in React

This will make it much easier to update the view after it becomes visible. This
commit is just a rewrite though and I haven't added any functionality yet.

This commit is dependent on atom/atom#3102 which allows me to workaround
facebook/react#1939. I might vendorize a hacked version of React if those bugs
take a while to be fixed.

Also I noticed one regression - clicking in the editor seems to have a slight
delay when the gutter is open. I'm not sure what's causing this but will try
to fix.

Test plan:

I tested every piece of functionality I could think of, including:

  * Clicking on hash links
  * Scrolling
  * Opening when already scrolled
  * Adjusting width
  * Opening on a file that's not checked in (error still appears)
Clean up requires now that React provided by Atom
Don't store a reference to the component descriptor

This isn't a component, it's just a component descriptor. Since it's not
actually being used for anything yet this isn't really a bug, but it's still
misleading code.

See http://facebook.github.io/react/blog/2014/03/21/react-v0.10.html#clone-on-mount
Add dependency on Atom v0.121.0

We're now using APIs that aren't present in v0.120.0, so only let people
upgrade if they have a recent version of Atom itself.
capture more data and add summary tooltips
Refactor render method for readability

Test Plan:
Toggled blame and it still works