PERF: Speedup in printing DataFrames of long strings
Currently, when printing DataFrames, each element of a table to be printed is first formatted in its entirety by `GenericArrayFormatter._format_strings` and then truncated by `_make_fixed_width`.  When processing DataFrames that contain very long strings, there is a noticeable computation delay when calling `DataFrame.__repr__`.

The bottleneck is in `_format_strings`, where each string runs several `str.replace` to format it for printing.  We can eliminate wasted time by slicing any any strings longer than the maximum column width **before** pretty formatting the string, leaving enough buffer space such that formatting the string won't bring it below the maximum column width.

### Performance Demonstration
Setup:
```python
>>> data = pd.DataFrame([str(list(range(5000000)))]*50)
>>> len(data.values[0][0]) #length of each string
3888890
>>> _ = data.__repr__()
```

Final steps goes from 0.97386 seconds to 0.0089 seconds to execute.