Support custom terminal widths (required to support pipes)

Right now piping to non-screen sources are not supported since they would fail when try to get the width of a terminal. This adds the flexibility to add a terminal_width parameter so that  we don't have to determine the width and trigger the IOError.