try not to crash if AB authorization is denied

Found various ways to crash apps on AB calls if the user does not give AB access permission or if calls are attempted while the access popup is still waiting. I probably haven't caught all the edge cases.

Also various refactorings, in particular nicer access to the multi-valued properties.