1. Should we make InferShape also a TSNode method for each op?  2. A separate question, should we have LazyShapeDtype.cpp return just a Shape instead of the current two methods, size and dtype, given that we are going to keep the Shape class?