Allow non display-related errors through display() and redisplay()

At present, if evaluation is delayed until display (i.e. due to lazy evaluation), any `MethodError`s caused by that evaluation are caught and obscured by the `display` function. e.g.

```julia
@lazy [:a*:b]
ERROR: no method display(LazyList,)
  in display at multimedia.jl:158
# Which should be:
ERROR: no method *(Symbol,Symbol)
```

As well as the specific case of delayed evaluation, this may make it much harder to debug any display related code, for example.

The first commit in this PR fixes this by checking that the `MethodError` was caused by `display`. The second attempts to make the code more robust by adding a `method_exists` check rather than catching the error, but if there are paticular reasons for using the error-catching method I can easily reverse it.