The server and client use the same functions to create/update a view.

Finally made everything asynchronous (and even optional, you can still make it block if you want).
This required a big reorganization of most functions.

Added a simple log() shim function, allowing us to tie into other log systems later on.