Feature - Handling Environments

This PR was created for the purpose of handling different environments and building them into classes that can be strictly type checked.

The EnvironmentFactory class can either take in a string, use the current `ENVIRONMENT` variable, or default to a `development` environment.

If the environment isn't recognized as one of the defined (development, staging, production) we create a CustomEnvironment class which will allow for custom configurations in the future.
Hmm, since this is a factory class (and not just a factory method in a concrete class), it might be wise to rename this creation method to allow more creation methods in the future (since PHP doesn't have overloading). It would also help to show the way its working internally.

Maybe something like `createFromEnvironmentString()`.