Unset environment attribute

Without the addition of type checking, the following would cause a stack trace:

```
env_object.override_attributes = { a: { b: true } }
env_object.unset_override_attribute("a.b.c")
```

With this change, the above causes no change to the attributes Mash as the `c` key does not exist.

There is also a major refactor of the EnvironmentObject test suite to DRY it up.