Tweaks to message, filter and error

- `message` now has get_path() etc. for accessing its metadata.
- `error` how has a constructor which takes a `message`,
  to ease conversion of error messages to throwable exceptions
  or `error_code`s
- `filter`'s predicate now takes `message`s by reference and
  is not ignored