soft asserts like in testng: check all and then throw all failures

update after review