Margin alignment
Highest initialises to -1 so that there is no upper limit on priorities
Tweak: Order by current ASC will help spread the load more evenly.

At the moment it favours lowest User ID as we don't track states between
db reads.  So if we instead query and order by lowest current contacts
we'll get the database to re-order every time and it saves us tracking
states all over the place.
Reinitialise userIds and customIds between runs so that we keep up to 
date with changes in the DB (without having to restart program)
HasFreeUser used with PhoneReader to see if person who answered the call
can have new contacts
Schema updates added canLogin to users

inbox_maps possibly surplus to requirements
Added helper to get phone topic for user assignment purposes
Added getAssignedUser for PhoneRecord purposes
Implemented user assignment for Phones