Refactor lein new argument parsing plus --snapshot option

It was a bit janky and hard to extend. This is maybe still janky, but
very extensible. Win?

We can now easily add new options to this command. I took some pains to
maintain backwards compatibility, even with the undocumented ability to
pass arguments on to templates. The full extent of this syntax isn't
documented in the docstring yet, but I'll expand that once we support
options that expose its darker corners.

Also add new --snapshot option that lets developers use SNAPSHOT versioned templates.