Publish preference

Adds a new user preference - publish - which controls whether new records are published by default.
It also changes the system default from true to false.
It required changing the schema for record type that have a publish property, and a new mixin for
those record types that ensures the publish property is set correctly when records are created.

Also includes frontend caching of user preferences using the same approach as permissions.

This change broke a bunch of tests because they were assuming publish defaults to true. In most
cases the test was fixed by explicitly setting publish to true.