web: use halt instead of returning error codes, config for show_exceptions

This improves the immediate experience, at least.

Fixes #719.