implement a new web worker demo

The current web worker demo does not function properly for a number of reasons:

- The worker generates a tremendous number of messages. Each message causes a DOM update. The browser gets bogged down trying to process them, making it appear as though the worker and main threads are not operating in parallel. 
- The code suggests that the worker can be stopped. However, because JS is not preemptive, the Worker won't get any messages until the entire computation block is done. Since the computation block is in an infinite loop, this will never happen.

This implementation does the following:
- Substantially reduces the number of messages sent to the main JS code
- Blocks the computation done in the web worker so that the worker "yields", allowing messages to be read from the message queue (and allowing the worker to be stopped).
- Adds user interactivity to the webpage to demonstrate that the user can interact while web worker code is running.