Add ContactThreadRead model to track when users last viewed each contact thread.
Contacts with messages newer than the last read time show a blue dot in the sidebar.
Opening a thread automatically marks it as read via markThreadRead mutation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>