Extract function `GMGetSize` and promisify
Extract function `GMGetSize` and promisify

The `GM(infile).size` function is async, and we just need the `size`
value resolved back from it. Wrapping this call up in a promise adds a
bit of boilerplate, but makes it very obvious that we're dealing with an
async function. Once we're past Node 6, we can async/await all of that
boilerplate.

The remainder of this 100+ line function body is synchronous.

iFixit/node-markup,iFixit/node-markup,iFixit/node-markup