Contexter: A better contextlib