fix(streaming): handle message boundary detection for tool_call chunks
The issue was that tool_call and assistant chunks could arrive without
a preceding reasoning_message, causing them to be rejected. Also, we
weren't detecting message boundaries on tool_call ID changes.
Changes:
- accumulateToolCall: Create new message if no current or ID mismatch
- accumulateAssistant: Create new message if no current or ID mismatch
- useMessageStream: Detect ID changes on both reasoning AND tool_call
This fixes the issue where multiple tool calls were being split into
separate message groups instead of accumulating into one.