A lot of changes to how layouts are used

There's now a public api exposed on the global Tinker object so people
can register their own layouts and activate them.