Viktor/sqlfunctions

This is a massive rewrite of a lot of stuff, but it will let us lock down the database a lot better.

I've tested everything affected afaik, but I could have missed something. We need to write real integration tests.
You can add `strict` at the end here to automatically `return null` if any input parameter is null. The function would not need to execute in that case.