Improve assert()

- don't evaluate the argument (but still generate code for its
evaluation) when NDEBUG is defined
- print function name on failure