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)
```

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.