Slate: port stock config to JS format

I used to use a 104-key keyboard (ie. with numeric keypad) and so was
able to keep some of my less frequently used Slate bindings on the
keypad. With the move to a tenkeyless board, I've had to rework my
bindings to make heavy use of chains (see commits 4b2b9a2bfe00e and
1fabf0ea7181b), but the results were suboptimal.

For example, to push a window to the left two-thirds of my laptop
display, even if the window was already on the laptop, would require me
to press a binding as many as 6 times to cycle through to the end of the
chain; ie. if the window was on the right of the laptop display:

1. Move to left half of main display
2. Move to left third of main display
3. Move to left two-thirds of main display
4. Move to left half of laptop
5. Move to left third of laptop
6. Move to left two-thirds of main display.. victory!

(It's true that the typical case was nowhere near as bad, but still, it
is a noteworthy degenerate case.)

With the move to JS, we can implement literally any logic that we
desire.

This commit is a straight port, but adds the following enhancements:

  - the cycle always starts on the current screen
  - after 1 second of inactivity, any given cycle resets
  - switching from one chain to any other resets as well

This is still not 100% perfect, but it's a big improvement over what
we had before. (The one edge case that isn't dealt with here yet is if
you switch apps, or windows within an app, before the one second timeout
has passed; the chain will continue without resetting; I should be able
to at least partly address this in a follow-up commit.)

Signed-off-by: Wincent Colaiuta <win@wincent.com>
Slate: reset chains on switching apps

Signed-off-by: Wincent Colaiuta <win@wincent.com>
Slate: focus Textual on layout swap

I don't want Skype to be on top of Textual, so make sure Textual gets
focus (albeit briefly, because the very next thing we do is focus
iTerm).

Signed-off-by: Wincent Colaiuta <win@wincent.com>
Slate: add an event listener to put iTerm windows where we like them

Not sure how much I am going to make use of this feature, but wanted a
demo of it in the config for potential later extension.

Signed-off-by: Wincent Colaiuta <win@wincent.com>
Slate: teach chain to reset on changing windows

The comments pretty much say it all. This gets us 99% of the way there,
I think, and is probably good enough for now. Hopefully the list of
"difficult" apps in the `fingerprint()` function won't grow too long; if
it does, I think I'll just drop the title across the board.

Signed-off-by: Wincent Colaiuta <win@wincent.com>
Slate: kill off a comment

I'm making this as a separate commit so that in cleaning out the cruft
from the tree, I have a place (ie. this commit) to explain my plan of
action.

As noted in that comment, the "Google Chrome Canary" rule doesn't match
any more. (The app on disk is still called "Google Chrome Canary.app",
but at runtime it presents itself as "Google Chrome".)

I'd still very much like to be able to target it though. It's possible
that by passing in a custom function for the "Google Chrome" target, we
can distinguish between the two seeing as we'll have a window reference
and from there can get a PID, and we also have the option of shelling
out to an arbitrary command.

Signed-off-by: Wincent Colaiuta <win@wincent.com>