Changes to allow for IE8 support

- Add isIE8 boolean for checking for IE8 bugs/quirks.
- Allow binding Input events to document or document.body, in addition
  to element, target, and window.  This was done because in IE8, mouse
events do not bubble to the window.
- Attach mouse event handlers to document, rather than window (because
  mouse events do not bubble to window in IE8).
- Make the add/removeEventListeners helper fall back to
  attach/detachEvent if the standard methods do not exist.  And also
prefix the event name with "on" for the attachEvent path.
- Use event.returnValue = false rather than preventDefault for IE8
- Handle the difference in IE8 mouseEvent.button/which values.  IE8 uses
  non-standard button values.
- Add basic polyfill implementations for Object.keys and Object.create
  in utils.js