Os-Agnostic Path Handling

I though all the slash and backslash handling all of the place was ugly. So I created OsPath to be os-agnostic, actually it simply detects the type of path.

Initially I had OsPath as storage type on RemotePathMapping but that was a bit tricky on the UI. But I left the OsPathConverter in case we want to add it transparently to the db in the future. It isn't used though.

Anyway, this PR is to get some feedback, I didn't look over it yet, so don't go all wild on code-standard stuff :)

I'm considering we should be using this anywhere were we actually use a path. Lemme know what you think.
I can make it private, but the OsPathKind is required. If for example you connect from a nzbdrone on linux to a transmission client on windows. You'll get slashes on the api (because transmission normalizes to slashes on either OS), but they have to be 'fixed' to backslashes because the source OS is Windows. The RemotePathMapping (translating it to the host OS) occurs later in the process.
This method is also used to normalize the slashes concatenations of Kind.Windows and Kind.Unknown (like with relative paths).