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.