first commit
Fix jslint warnings
add mouse state
fix typos all round the project
add StaticEntity class
add tests for static entity
add tests for logic system depending on IO system
-add cycleOnce and spiralCycle helpers
-refactor core.js spec to use the new helpers
-fix indentation in core.js
-add cycleHalf and cycleMany helpers
-add tests for static interpolation systems
add many cycles tests
add many cycle test helper
Add the ability to remove systems(not during runtime)
add validations
-static system cannot depend on non-static system
-add and fix previouse tests
-split specs into cores and systems
-move engine cycles mocks from helpers into mocks
-create system mocks
-remove entities after each cycle
-remove systems that created in specs
-fix remove systems bug
-refactor specs to use forEach callbacks to recreate entities/systems
add tests for keyboardstate
-refactore mouse state
-add tests to mouse state
-split tests into system and Zcore test
add test for clietX,clientY
-add tests for HIDState
-add move duplicated code to helpers and refactor keyboard/mouse specs
-fix prefixKeys utility confused key with value
workaround chrome keydown event bug
fix mocks bug
add mouse state tests
Refactored keyboardState and MouseState.
All input systems state consists of triggered keys as follows:
{
    [key]: {
        down: [timestamp], // when the key was pressed
        up: [timestamp], // when the key was unpressed
        pressed: [bool] // is the key currently pressed
    }
}

Created new system HIDState which purpose is to combine all inputs systems.

Implemented another new system HIDComboState. The purpose of this system is
to register and handle combos of input systems.
Combos registration and checking if triggered is done througe HIDComboState components
as follows:

{
    /*
    {
      "keys"              : null,   - array of keys
      "trigger"           : null,   - {down|up|release}
                                      down    - combo trigger on all of the keys down
                                      up      - combo trigger on all of the keys up
                                      release - combo trigger on one of the keys up
      "isOnce"            : false,  - Normally while holding the keys combo will be always triggered, setting this to true will trigger and wait for release before triggering again
      "isOrdered"         : false,  - will trigger only if clicked in the correct order
      "isSequence"        : false,  - when "isOrdered" is true will trigger only if key were clicked in one sequence meaning, no other key then specified in the combo were clicked in-between
      "isExclusive"       : false,  - Normally when pressing a key, any and all combos that match will have their callbacks called.
                                      For instance, pressing 'shift' and then 's' would activate the following combos if they existed: "shift", "shift s" and "s".
                                      When we set isExclusive to true, we will not call the callbacks for any combos that are also exclusive and less specific.
      "isSolitary"        : false   - This option will check that ONLY the combo's keys are being pressed when set to true. When set to the default value of false,
                                      a combo can be activated even if extraneous keys are pressed
    }

    returns handler to use with isTriggered()

    */
    register: function (args) {},

    // removes combo
    // handler - (integer) a handler to a combo
    unregister: function (handler) { },

    // checks if a certain combo is triggered
    // handler - (integer) a handler to a combo
    isTriggered: function (handler) { },

    // direct access to all states
    state: {}
}

Additional changes:

Refactor all code to comply with jshint specifications,

Implement StaticSystems and StaticEntity for purpose of dealing with IO systems
like keyboard, mouse, graphic or another system that should run upon engine
start without the existence of another normal entity, you can specify that system is static
by setting static: true when creating entity.

change grunt testing to use livereload and display the results in the browser isntead of console

Also it goes without saying everything got extensive tests