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.
OK, I think that can be done more cleanly at the library level (e.g. `shell.showtraceback()` may drop you into the debugger - it's not just rendering the traceback). I think there's enough to work out there that it's best done separately.