Move assert.h from internal to very public (included in types.h)

This reduces friction to writing an assert, so hopefully there will be
more of them as a result. And we can use asserts in public headers
now, very useful for templates.