Keep root path in canonical

[The assertion](https://github.com/boostorg/filesystem/blob/develop/src/operations.cpp#L850) fails if you call `canonical("../some-directory", "/")`. This is because the root path is removed in the loop if the current segment equals to `..` although the current `result` only contains the root path.
I think one would expect `/some-directory` as the result.

I don't know if there is a more efficient/elegant solution. Let me know if there is one. :)