Fix destructor calls of temporaries inside an assert.

An assert expression has a slightly different requirement: if the assertion holds then
the expression of the message is not evaluated. A destructor of a temporary variable must
not be called because the object was never constructed.
If the assertion does not hold and an exception is raised, then the destructor must be
called in a finally block.

This fixes a test failure in xtest46.d