Admin handler which makes exceptions pretty

When an exception is raised by the DataSet model's save() method, by
default this bubbles up to the user who gets an unfriendly HTTP 500.

This converts exceptions to admin UI warnings using the messages
framework.