Adding alternate hatching mode

Not fully correct, and not enabled from the UI yet
Adding alternate region builder that minimizes getImageData() calls

Appears to generally be much faster in Chrome and Safari.
Removing unnecessary object construction
Scaling output based on devicePixelRatio
Extracting controller to a module instead of global function
Allowing downloads of images larger than 2MB in Chrome

Works around Chrome limitation that causes a crash if data URL is
larger than 2MB. Instead, uses a Blob URL.
Minor code formatting