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.