Add pin widget code

This add a new approach to the pin entry. Hopefully as this is quite a bit simpler than the old way we'll see less edge-case bugs that need working around.