Allow provider to work beyond MacOS.

* Add parent provider and migrate shared methods.
* Add detection for MacOS specific path.
* Maintain boxen as default user, but support other target user.