[IOACCT] Fix ioacct race
When page becomes dirty there's no time to store a context
on it - page may become clean immediately.
Thus we had a race in accounting when a page became clean
before we set a context on it and this context got lost and
Handle the context the other way - in case we're going to
set a new context on a page that already has one - free it
and account written bytes in case the page became clean.
When removing a context from a page - handle the case when
a page does not have one due to the race in question. In
any case dirty page will have a context set, and a clean
one will have not.