Replaced unsafe `proc_address` function with `load_function`.

The overloads of `proc_address` that took a library name and function name were unsafe because they released their reference to the library before returning the function pointer.  If other code still had a handle to the library, the function would work because the library wouldn't be unloaded.  However, if the library was not previously loaded, the library would be unloaded as the reference is released, and calling the function would cause a crash.

This commit fixes that by replacing those overloads of `proc_address` with a function called `load_library` that returns a `boost::function` that holds a smart reference to the loaded library instead of returning a plain function pointer.  This way, the library will be held loaded at least until the function is out of scope and so can no longer be called.
Fix exception typo.
Fix menu test window proc.

The test window class window-proc was destroying the HWND, which would then also be restroyed afterwards by our C++ class.  This upset Windows very much and prevented any further windows being show.  This patch fixes this by simply using `DefWindowProc`.
Added progress bar API to `task_dialog`.
Support changing the bar state of task dialog progress bars.
Fix bug matching common button clicks to their callback.

We save the callback using one form of button ID (ours) and tried to fetch it using another (Windows's).  This commit fixes the problem by making sure our ID and Window's IDs have the same underlying values.
Fix shell date formatting tests.

We were forgetting that the shell expects a UTC datetime input but formats it to a local datetime string.  We change our expected text to match this.