Implemented a 'resolve' function for recursive attribute sets that works without Haskell's mdo notation.

This change also allows the 'eval' function to be a 'ErrorT e Reader Dict a'
monad, i.e. the code can use synchronous exceptions for error reporting.