UPnP track file state on remote server when supported

This adds support for saving resume points and updating watched status on a server rather than locally, which means users can watch a file on one machine, stop it then pick up on another. Changes on either server or client are mirrored instantly on the other. Lots of users have complained about the lack of this feature, as changes currently only propagate from server -> client. This is currently video items only, though I'll add another PR which updates playcounts for music tracks soon.

Most of this should hopefully be uncontroversial, though I had to push a specific announce message in CSaveFileStateJob when a file is modified on the server, as currently AddBookMarksToFile/ClearBookmarks do not announce. Adding an announcement to those is probably preferable but much more code is needed to determine the content of the file (as they operates on all files not just library items).