runners: enforce RunnerCaps via create() indirection

Require all implementations to provide a do_create(), a new
ZephyrBinaryRunner abstract class method, and make create() itself
concrete.

This allows us to enforce common conventions related to individual
runner capabilities as each runner provides to the core via
RunnerCaps.

For now, just enforce that:

- common options related to capabilities are always added, so runners
  can't reuse them for different ends

- common options provided for runners which don't support them emit
  sensible error messages that should be easy to diagnose and support

Signed-off-by: Martí Bolívar <marti.bolivar@nordicsemi.no>
diff --git a/scripts/west_commands/runners/qemu.py b/scripts/west_commands/runners/qemu.py
index de417dc..7609cbb 100644
--- a/scripts/west_commands/runners/qemu.py
+++ b/scripts/west_commands/runners/qemu.py
@@ -24,7 +24,7 @@
         pass                    # Nothing to do.
 
     @classmethod
-    def create(cls, cfg, args):
+    def do_create(cls, cfg, args):
         return QemuBinaryRunner(cfg)
 
     def do_run(self, command, **kwargs):