Project: let stack determine its own equality

When adding a stack to project, let Stack determine whether it is a
duplicate of an existing stack. This will allow extensions to stack to
override this equality when ID is not sufficient.
Init: allow stack constructor to be specified

When opening a stack, allow the constructor to be specified so that
extensions to Stack can be applied where needed.
Init: pass opened stacks to callback