Add allowed values and nested variables & a bit of refactoring to make intention clearer

Hi,

We're using `Dotenv` on a project of ours, and wanted to extend it's functionality a little.

This PR is just us presenting back what we've done, and won't be at all offended if you don't want to merge it, for example if we haven't provided enough info.

Main changes made:

- allow an array of allowed values to be passed along with the `Dotenv::required` call (with tests)
- allow basic nesting as you would find in a shell script, e.g. …

    BASEDIR=/var/webroot/project
    CACHEDIR="$BASEDIR/cache"

Let me know what you think or if you'd want need anything else to accept it.

Cheers,

Kelvin