use exceptions instead of introspection
check for dict type in case object implements get
add ttl to memoize