I'll probably redo this with UMD soon (since I don't like build system dependencies and ESnext Modules don't look ready for clientside primetime any time soon) - that'll make the constructor for #1 and #3 easier (since it'll inherently encapsulate scope for the constructor and stuff).