Preparatory commits for "universal door"

These changes are needed to support the universal door.
Reviewers: @josh-ripple @mtrippled 
At first glance it looks like you're trying to blow up the stack, but another version of append() is being called. Are they both appending? Is the the external interface, and the other append is internal against the real member?