Convert core code to OOP

Still incomplete:
- [ ] Add general exception handling
- [ ] Determine if RunAsAdmin integration is still required