Path configuration

This commit is a start on a bit of a refactor to try and remove some of the hard-coded dependency on constants. The goal is to make it a bit more easy to bootstrap an app especially for testing purposes when you can't really depend on any of the standard paths being around.

Application level configuration can be passed into the Bolt\Application constructor, if they aren't set then the config class will continue to use the constants.