major refactor, renaming.  introduced 'stackable' to create methods that take either stack or fn to avoid having two functions for everything.  Lots of docs to update.