Converted tabs to 4 spaces for gitHub diff readability.

This is not a comment on your code style.
Moved separate var declarations to compound style

This tends to be the preferred syntax for declaring groups of variables.  It is also faster: http://jsperf.com/different-styles-of-var-declaration
Converted `getActivePlayer` and `getInactivePlayer` to single line ternary return statements.

I love ternary return statements!
Simplified `nextMove` to avoid nested conditionals

This is a good general pattern for acheiving the same logical flow as several nested conditional statements.  Here we simply return out of the function early if the game is over, otherwise we return another ternary operation to fire the correct play function.

Did I mention that I _love_ ternary returns?
Converted == to ===

They say "never use ==, always use ===". The short reason is because == is prone to faulty behavior.

Here's one longer explanation why: http://www.2ality.com/2011/12/strict-equality-exemptions.html
Whoops! Fixed game-breaking typo from 4c2e765
Removed unnecessary parentheticals from `checkWinner`

Unless a comparison contains multiple compound operations,
parentheticals are unnecessary.
Condensed conditional in `checkWinner`

Enhances readibility.
Fixes win / draw announce bug.

In `checkWinner` the code to update `p#player` with the result message
was broken.  Basically it's because after the last `checkWinner` runs,
ending the game there is still a call to `switchPlayer`.  We simply
added the same check to `gameOver` as is exiting from the `nextMove`
function.  This restores the expected behavior.
Cleaned up longer conditional statements & fixed `checkTwo` bug

Removed more unecessary parentheticals from conditionals and fixed the
syntax issue in `checkTwo` that probably led to some buggy behavior (
not that we detected it. )
Whoops! Overzelously removed the last parenthesis from  conditional
Wrapped code in self-executing anonymous function and added 'strict mode'

In strict mode browsers will prevent you doing things like accidentally leaving a `var` keyword out of a loop: `for( i in foo )` -- without strict mode this will run fine, and pollute the global scope with `window.i`.  In strict mode this would throw an `undefined variable` error.

In this case 'strict mode' revealed that `player1Controller` and `player2Controller` were not being explicitly defined and were still leaking to global, this is fixed by this.
Merge pull request #1 from danielmendel/code-review

Code Review