BetterDict

This PR swaps out `DotDict` for `BetterDict`. 

We were having trouble [calling `deepcopy` on a `DotDict` in demands](https://github.com/yola/demands/blob/master/demands/__init__.py#L64) because `DotDict` mapped `getattr` to `dict.getitem`. When `deepcopy` gets called, it does a `getattr(x, '__deepcopy__')` on the object and the dict did not have that item.

`BetterDict` handles this case better and it works as a drop-in replacement.

I have also opened [another, mutually exclusive, PR](https://github.com/yola/yoconfigurator/pull/24) that patches `DotDict` in case we find that `BetterDict` breaks deploy behavior.

**NOTE**: We need to test this across deploying all of our apps because we may have [some hacks](https://github.com/yola/sbbe/blob/master/deploy/configuration/sbbe-local.py#L59) in place to work around issues with `DotDict`

HUGE thanks to @RayeN for helping me diagnose this!