closes #292
closes #289 with performance improvement to replaceall()
closes #286 with additional join tests
closes #288 by ensuring header() always returns a tuple
v0.26
increment version