UIService: be careful setting status/progress

It is reasonable to want to reset only the status or progress of a UI
using a StatusEvent. However, the setting of both was being enforced by
the DefaultUIService's implementation.

Now, we check the received StatusEvent. The progress is only set if the
max is >= 0, and the message is only set if the string is not null.