complete rewrite of ArgumentParser