split argument parser out into standalone object