Throw more specific exception when 0 rows found

Rationale: Most applications will want to handle a 0-row result differently from an n-row result from a call to `Collection::one()`.

E.g. a 0-row result might be rethrown as an HTTP 404 error, while an n-row result might indicate a data integrity error (i.e. an HTTP 500 error).

Note: Semantically I don't think `NotFoundException` extends `ConstraintException`, but it's implemented this way for backwards compatibility.

/cc @arthens, @dhotson, @dannymidnight