LookUp methods for RefById, LazyId, and RefManyById are now implicitly passed rather than globally set

This is mostly stylistic, but it will also help with testability, as it means that tests can run in parallel with different lookup methods for different test cases
Added an implicit conversion from Throwable to RefFailed
Separated DataAction.returning.one and DataAction.returning.oneWH (one with headers) methods

Where a DataAction.returning.one used a for loop, we'd sometimes find a problem where the compiler couldn't work out the implicit conversion unless we broke it up into

var res = for { .... } yield ...
res

Presumably as the compiler was trying to inver types back in the for loop, but didn't know the result needed to be a Ref[T] because the method expects WithHeaderInfo[Ref[T]]

This should alleviate that.
DAO, rather than being generic DAO[T] now has a type variable DataT

This is so that the following will compile

val catalog = new LookUpCatalog
for  (dao <- Seq(OneDAO, AnotherDAO)) {
  catalog.registerStringLookUp(dao.clazz, dao.LookUp)
}

By having DataT as a type variable, the compiler retains the relationship that dao.clazz is Class[dao.DataT] and dao.LookUp is LookUp[dao.DataT, String]
whereas in the generic case it seemed not to.