show traceback for broken reprs

instead of short custom 'repr failed' message

and add file arg to showtraceback, allowing capture of rendered tracebacks.

closes #6384

Before:

```python
In [1]: class Foo(object):
   ...:     def __repr__(self):
   ...:         raise Exception()
   ...:     

In [2]: Foo()
Out[2]: <repr(<__main__.Foo at 0x7f50f6bb69d0>) failed: Exception: oops>
```

After:

```python
In [3]: class Foo(object):
   ...:     def __repr__(self):
   ...:         raise Exception('oops')
   ...:     

In [4]: Foo()
Out[4]: 
---------------------------------------------------------------------------
Exception                                 Traceback (most recent call last)
<ipython-input-3-e87811d6aa00> in __repr__(self)
      1 class Foo(object):
      2     def __repr__(self):
----> 3         raise Exception('oops')
      4 

Exception: oops
```

Note that the exception is still caught, it is just rendered as if it raised normally.
I've wanted it a number of times, including here - where I want the IPython-rendered traceback, exactly as it would be displayed, but as a string. Seems silly not to have it. I'll pull it out here, and let that discussion be independent.