[core] SMART/ATA over USB initial support

* This is meant to be used as part of #219
* Also improve WindowsErrorString() so that it doesn't alter the current errcode