Fix chat line expiration

The chat display overlay would remove one chat line every X ticks.
It will now keep track of the time each chat line has to be removed
and act accordingly.

For example, if 3 chat lines are added with 1 second difference
from each other, they will be removed one after the other, with the
same 1 second difference.
Minor clean up
Fix text-wrapping special case

If a line of text contained a whole word that was longer than the
allotted space, it would fail to wrap that line completely, even
if it was possible to wrap at other locations.

Fixing this uncovered a second issue, where it would drop the last
line if the input had more than one lines and one of the first ones
was wider than the specified width.
Fix issue #5149: Make chat window not autoscroll

It will autoscroll unless the chat window is open and the scroll
position is not at the bottom.
Style fixes
Fix overlay chat lines expiration

It wasn't working right when the widget was hidden because it
wasn't receiving any Ticks. Instead of counting, we're now using
Game.LocalTick as the tick source.
Fix scroll offsets

This is not a full fix, it merely restores the functionality
already present. The ScrollPanelWidget does not work right if
Align is set to Bottom but ScrollToBottom() isn't called after
adding items and there's not enough content to scroll.
Merge pull request #5191 from pavlos256/chat-window-improvements

Chat window improvements