breakout logic into its own module

**This PR depends on #19**.  Once #19 is merged in, I'll cherry-pick 8ed832d on top of it.

In #17, it was mentioned that breaking out the logic into its own module might be a good idea.  I agreed, and thought it wouldn't take too long, and it didn't, so here it is.

Feel free to take `umd-template` and `npm publish` it or whatever.  If you wish, I can do this, then either rewrite this PR to require the published module or provide a new PR.  

This is more exploratory than anything, because:

1.  There are no unit tests.
2.  There are no comments.
3.  The formatting isn't quite exactly the same.

I ran the demo against it and it seemed to work, but your mileage may vary.  Let me know what you think.