Added a couple safety features

* Prevent adding a layer name to the _layersToRemove queue if they have
  already been added
* Added small safety if a layer has already been removed when attempting
  to clear layers
Whitespace fixes and changes

I've started to like enforcing curly brackets for even simple if and for
blocks, thus I added the jshint curly enforcement.
Delete is very bad for optimizations

Especially with it living in such a hot method. Removing and setting to
null.
Adding layerOrder pop and push

Upon thinking further, I think I need to rehaul the API a bit. I think,
since I as I am starting to use this more, I am finding issues with the
current API.
Various Layers updates and fixes

Added pre and post run callback queue
    This enables you to simply push a method to an array, to be called
    at the end of the current frame or before the next frame.

    ig.game.onPreRun.push(func);  // Calls func before the next frame
    ig.game.onPostRun.push(func); // Calls func at the end of current frame

Renamed ._cleanUp API to ._itemCleanUp
    I think this will be a more descriptive API that's related to
    Layers.js. It also makes logic easier to parse when you have your
    own .cleanUp methods that you call deliberately, vs ._itemCleanUp
    which gets called automatically when an item is removed from its
    respective layer. I need to still update the docs to reflect this.

Improved the robustness of removing queued items
    By removing items AFTER clearing levels, it simplifies execution
    since I won't need to splice the item out of its layer's items array

Silently fail on adjusting layer properties if the layer does not exist
    This helps prevent various issues where a level could get removed or
    cleared and have properties set on the same tick.