Maid 271 Windows Permissions

This patch will convert Posix ACLs from MetaData to a windows ACL list and then verify access privileges to the appropriate functions. Since every file/folder in drive is currently marked as read/write to the owner only, this patch will restrict access to drive to the user that mounted in windows. No other user will be able to view or modify the contents of the drive. This patch is pretty large, and might need to be held off until drive_v2 is merged into next (talk to Prakash).

I would also like feedback on the error handling. I decided to throw exceptions if a windows function failed - this should only happen in extreme circumstances (bad parameter or out-of-memory, etc.). expect<> might be preferrable here, but its not available, and the error cases should truly be rare.
I was wondering about this too. I did it this way primarily out of laziness - I didn't have to update all the calls to this function to include `.get()`. The negative I see is that someone could try const_cast and change this argument, but thats violating the language anyway. 

Sutter's argument is that it forces lifetime management on the client unnecessarily, whereas a raw pointer allows a pointer from a shared_ptr, unique_ptr, or raw ptr. I hadn't thought of this before. My only counter-argument would be historical reasons. Smart ptrs make ownership rules a little more clear when reading code, and accepting a raw pointer is generally unclear on the ownership rules. `const unique_ptr<>&` is very clearly accepting a pointer whose ownership is not taken by the function. Still, its probably time we break old C habits and take raw pointer to mean no-ownership transfer.

I'll move this back to `HANDLE` unless if you feel differently.