Add a case class custom shape test case and docs

review by @szeiger
Your table is a class definition. There is no place where this type could be inferred. That's why `*` uses an implicit conversion to a ProvenShape to ensure the types are correct.