Regarding to the implementation details, I created a StacksFacet interface (that's supposed to be implemented if you want to add a new stack) that returns a Stack object (that is in charge of deciding if a given ProjectFacet is supported). Stacks are built using the StackBuilder class.
I have added a --stack option in the project-new command that just calls the StackFacet.install() method. In order to find the facet bound to the project it is simply a matter of calling:
project.getFacet(StackFacet.class).
Let me know if you have any questions. I'd be more than happy to answer.