Use MessageChannel.js to support more browsers

Tests passing in Chrome and Firefox.