Adding JS dialog events

Implemented the JS Dialog handler. This means that there are now methods
for the 4 kinds of dialogs: confirm, alert, prompt and navigation. All of
which are styled after the windows Webkit dialogs of the same kind. The
methods take a JS Dialog Callback object that they execute after the
dialog is closed.

Caveats:
* The style of the before navigation dialog is different from the others.
  This is something I duplicated from the webkit implementation but it
  strikes me as odd.
reverting the JS dialogs functionality since CEF3 provides it for free
(sorry Benoit, I should have read the contract closer when making the
original plan)
Adding support for downloads

The included CEF download handler gets us everything up to when the
download starts. CEF does not provide any way for the user to cancel the
dialogs so I have created a CEFDownload object that maintains the state of
the download.

The CEFDownload objects are stored in a hash table in CEF so that the
download progress notifications can be directed to the correct dialog.
Each download within chrome is identified by a unique 32bit identifier and
this is the only way of keeping track of them. The download progress
events are completely asynchronous and they begin firing before the
download has actually started(I am not sure why they do this as they do
not appear to be doing something like starting the download in advance of
the user naming it to save time. Unless this is what is going on and the
received bytes is just not updated accordingly).

NOTE: the documentation on the download handler is wrong. The download
events begin firing even if you do not fire the before download callback.

Caveats:
* Currently when you navigate directly to a file that chrome downloads, it
  does not update the frame or the address bar. However if you navigate in
  the frame the download stops. The correct behaviour would be to somehow
  catch this, navigate to about:blank, and start the download as though a
  link was clicked. As of yet I do not know how to do the first or last
  steps.
* The download window I create could be a good deal nicer (CEF provides
  things like the ETA and download speed).
* Not sure where I should put the object CEFDownload, if it should be
  called something else, if it should be a widget that contains state as
  opposed to a state object that contains a widget, etc... I am not sure
  of the best practices here.
* I may have missed some of the race conditions that can occur due to the
  assynchronous nature of the download events. My synchronization and some
  of my checks may also be unnecessary.