Set up new infrastructure (#330)

- Add StructureMap as IoC container
- Add AppContext to juggle startup windows
- Add Bootstrapper to init IoC container and app context
- Change the startup workflow
- Add interfaces and default implementation for a number of services