Add windows userdata

This is a work-in-progress branch.

This branch adds userdata support for windows systems.
+1
Abstract away the differences of creating directories/writing files, and then keep the business logic common.