code: function loadEnvironment(config) {
  	if (typeof(config) !== 'object') {
  		return {};
  	}
  
  	var castFns = {
  		int: function (val) {
  			return parseInt(val, 10);
  		},
  		float: function (val) {
  			return parseFloat(val);
  		},
  		bool: function (val) {
  			return val === 'true';
  		}
  	};
  
  	var finalConf = {};
  	for (var key in config) {
  		if (!config.hasOwnProperty(key)) {
  			continue;
  		}
  
  		var val = config[key];
  
  		switch (typeof(val)) {
  		case 'object':
  			finalConf[key] = loadEnvironment(val);
  			break;
  		case 'string':
  			var type = 'string';
  			if (val.indexOf(':') !== -1) {
  				var tmp = val.split(':');
  				val = tmp[0];
  				type = tmp[1];
  			}
  
  			if (process.env[val]) {
  				var cast = castFns[type] || String;
  				finalConf[key] = cast(process.env[val]);
  			}
  			break;
  		default:
  			logger.warning('Invalid type for key "' + key + '", should be string, skipping.');
  			break;
  		}
  	}
  	return finalConf;
  }
docs: Given a configuration, recursively parses it and tries to match values to environment variables
  Environment variables can be cast to a specific type by adding using (env_name):(type) as a syntax.
  
  @param {Object} config The env configuration to parse
  @returns {Object}