Add utility method that gets the device number for a path

This allows to determine if two paths are on different drives. The
existing .NET DriveInfo class doesn't work for this purpose on
Linux since it only includes the physical drives, not ram disks.
And Path.GetPathRoot() doesn't work since it always returns '/'.

Change-Id: I5fb7a4608c85ae8f2f6051834e09ea9e1606c41e
Fix DirectoryUtilties.MoveDirectorySafely method

On Linux the root paths are the same even when the paths are on
different volumes. The same can be true on Windows if partitions
are mounted to paths instead of drive letters. This change
catches this and tries to copy/delete in this case as well.

Change-Id: I7eef0441e27488249c0070a5e42eb394bef98123
Implement PathUtilities.DeleteToRecycleBin

This change adds a method that allows to delete to the trash bin
in a cross-platform way.

Change-Id: I9b17be3ece7704e2dd02bc419c6a388add3d1555