This change fixes some subtle state bugs in the switch handling by making isOn a direct function of the Tunnel.
This commit also fixes all linter warnings and errors.
This commit introduces the Tunnel view model object which has support for asking for permission, starting and stopping the tunnel. It automatically updates its state and publishes changes as an ObservableObject.