boost::filesystem::rename throw exception when target file exists, but documentation tell us that it must be replaced

Description

[Note: If from_p and to_p resolve to the same file, no action is taken. '''Otherwise, if to_p resolves to an existing file, it is removed'''. A symbolic link is itself renamed, rather than the file it resolves to being renamed. -- end note]

Passing the call back to POSIX's rename(2) call should result in the desired outcome that matches the semantics of both POSIX's rename(2) call and boost::filesystem's documentation. The attached patch fixes this problem and changes the behavior of boost::filesystem::rename() to match that of rename(2). I believe that the Win32 API is doing the correct thing. The extra exists() checks should be removed from the POSIX versions according to the posix specification. POSIX rename(2) guarantees rename(2) to be atomic and the extra check creates a race condition that prevents boost's rename() from being used.