Support room PIN

This PR adds full support for PIN locked rooms to the channelling API, low level web client support code, and a basic UI for testing.

Other changes support this implementation or are refactoring to improve application architecture or testability.