General comment about the changes here: I'm not a big fan of having a default behaviour for Pretty or Object in the methods of Document. I like to think of Document as a simple algebra with well-defined operators from Documents to Documents. 

I'm not even super happy about my choice of defining join as a method of Document, because it can easily be expressed without knowing anything about the actual Implementation of Document and I was considering moving it to a toplevel function or in a mixin.

The special Pretty and Object case seem to me like extra utility methods that I would rather put in some utility class or library. But maybe I'm being overly zealous there. What do you think?