use argparse rather than getopt

Depends on #6810 (closed)

We ought to move to argparse rather than hard-code our own. This would make it easier to inheritance options between modules, for example something like

# in flashproxy.util

def add_module_opts(parser):
  parser.add_argument("--unsafe_logging", etc)
  old_parse = parser.parse_args
  parser.parse_args = lambda **kwargs: _parse_module_opts(old_parse(**kwargs))

def _parse_module_opts(parsed_opts): # a Namespace object
  if parsed_opts.unsafe_logging:
    # do something
  return parsed_opts

Then in the main script:

def main(argv):
  parser = argparse.ArgumentParser()
  parser.add_argument(app-specific)
  flashproxy.util.add_module_opts(parser)
  ...
  opts = parser.parse_args()
  ...
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information