We were catching input problems with assert()-s. This is wrong

assert() must only be used for internal sanity checks. Not for catching
wrong input from users. In case Release mode is built, the input will
not be sanitized, which is very bad. Use FatalError() in this case, and
maybe an assert() at the end just to make sure that everything is OK

Fixes #40