CI: Fix screenshots.js to get only browser/OS version from Sauce

The browser and OS names reported by Sauce are inconsistent (Chrome on
macOS is reported as being on "Mac OS X"; Firefox and Safari on macOS is
reported as being on "MAC") and poorly formatted (all-caps or all
lowercase).

Note that .platformVersion is only reported by some drivers, so it's
optional.
diff --git a/script/screenshots.js b/script/screenshots.js
index a063287..2b03786 100644
--- a/script/screenshots.js
+++ b/script/screenshots.js
@@ -81,25 +81,29 @@
   var browserDriver = wd.promiseChainRemote('ondemand.saucelabs.com', 80, username, accessKey);
   return browserDriver.init(browser.config)
   .then(function(args) {
-    var cfg = args[1] || browser.config;
-    console.log(cfg.browserName, cfg.version, cfg.platform, 'init', args);
+    var cfg = browser.config, capabilities = args[1];
+    var sessionName = [cfg.browserName, capabilities.version, cfg.platform].join(' ');
+    if (capabilities.platformVersion) sessionName += ' ' + capabilities.platformVersion;
+    console.log(sessionName, 'init', args);
 
-    var pinned = browser.pinned ? 'PINNED' : 'EVERGREEN';
-    var filename = [pinned, cfg.platform, cfg.browserName].join('_').replace(/ /g, '_');
+    var evergreen = browser.pinned ? '' : '_(evergreen)';
+    var fileName = [cfg.browserName, capabilities.version + evergreen, cfg.platform].join('_');
+    if (capabilities.platformVersion) fileName += ' ' + capabilities.platformVersion;
+    fileName = fileName.replace(/ /g, '_');
 
     return browserDriver.get(url)
     .then(function() {
-      console.log(cfg.browserName, cfg.version, cfg.platform, 'get');
+      console.log(sessionName, 'get');
       return [browserDriver.safeExecute('document.documentElement.scrollHeight'),
               browserDriver.safeExecute('document.documentElement.clientHeight')];
     })
     .spread(function(scrollHeight, viewportHeight) {
-      console.log(cfg.browserName, cfg.version,  cfg.platform, 'get scrollHeight, clientHeight', scrollHeight, viewportHeight);
+      console.log(sessionName, 'get scrollHeight, clientHeight', scrollHeight, viewportHeight);
 
       // the easy case: Firefox and IE return a screenshot of the entire webpage
       if (cfg.browserName === 'Firefox' || cfg.browserName === 'Internet Explorer') {
         return browserDriver.saveScreenshot(baseDir + '/imgs/' + filename + '.png')
-        .then(willLog(cfg.browserName, cfg.version, cfg.platform, 'saveScreenshot'))
+        .then(willLog(sessionName, 'saveScreenshot'))
       // the hard case: for Chrome, Safari, and Edge, scroll through the page and
       // take screenshots of each piece; circle.yml will stitch them together
       } else {
@@ -111,7 +115,7 @@
         return (function loop() {
           return browserDriver.saveScreenshot(piecesDir + index + '.png')
           .then(function() {
-            console.log(cfg.browserName, cfg.version, cfg.platform, 'saveScreenshot');
+            console.log(sessionName, 'saveScreenshot');
 
             scrollTop += viewportHeight;
             index += 1;
@@ -124,7 +128,7 @@
               // Use `window.scrollTo` instead of jQuery because jQuery was
               // causing a stackoverflow in Safari.
               return browserDriver.safeEval('window.scrollTo(0,'+scrollTop+');')
-              .then(willLog(cfg.browserName, cfg.version, cfg.platform, 'scrollTo()'))
+              .then(willLog(sessionName, 'scrollTo()'))
               .then(loop);
             } else { // we are past the bottom edge of the page, reduce window size to
               // fit only the part of the page that hasn't been screenshotted.
@@ -134,17 +138,17 @@
 
               return browserDriver.getWindowSize()
               .then(function(windowSize) {
-                console.log(cfg.browserName, cfg.version, cfg.platform, 'getWindowSize');
+                console.log(sessionName, 'getWindowSize');
                 // window size is a little bigger than the viewport because of address
                 // bar and scrollbars and stuff
                 var windowPadding = windowSize.height - viewportHeight;
                 var newWindowHeight = scrollHeight - scrollTop + windowPadding;
                 return browserDriver.setWindowSize(windowSize.width, newWindowHeight)
-                .then(willLog(cfg.browserName, cfg.version, cfg.platform, 'setWindowSize'))
+                .then(willLog(sessionName, 'setWindowSize'))
                 .safeEval('window.scrollTo(0,'+scrollHeight+');')
-                .then(willLog(cfg.browserName, cfg.version, cfg.platform, 'scrollTo() Final'))
+                .then(willLog(sessionName, 'scrollTo() Final'))
                 .saveScreenshot(piecesDir + index + '.png')
-                .then(willLog(cfg.browserName, cfg.version, cfg.platform, 'saveScreenshot Final'));
+                .then(willLog(sessionName, 'saveScreenshot Final'));
               });
             }
           });
@@ -153,23 +157,23 @@
     })
     .log('browser')
     .then(function(logs) {
-      var logfile = baseDir + '/browser_logs/' + [cfg.browserName, cfg.version, cfg.platform].join('_').replace(/ /g, '_') + '.log';
+      var logfile = baseDir + '/browser_logs/' + sessionName.replace(/ /g, '_') + '.log';
       return new Promise(function(resolve, reject) {
         fs.writeFile(logfile, JSON.stringify(logs, null, 2), function(err) {
           if (err) return reject(err);
-          console.log(cfg.browserName, cfg.version, cfg.platform, 'writeFile');
+          console.log(sessionName, 'writeFile');
 
           return resolve(browserDriver.quit());
         });
       });
     }, function(err) {
       // the Edge/Internet Explorer drivers don't support logs, but the others do
-      console.log(cfg.browserName, cfg.platform, 'Error fetching logs:', JSON.stringify(err, null, 2));
+      console.log(sessionName, 'Error fetching logs:', JSON.stringify(err, null, 2));
       return [];
     });
   })
   .fail(function(err) {
-    console.log('ERROR:', cfg.browserName, cfg.platform);
+    console.log('ERROR:', sessionName);
     console.log(JSON.stringify(err, null, 2));
   });