Bug fix: ExpectEndOfStream didn't actually work

ExpectEndOfStream() used Emit.Call(TextReader_Read) rather than Emit.CallVirtual(TextReader_Read) which meant that it always was getting -1 back! To fix this I had to determine if we *should* be doing an end of stream check, as if we are a recursive type then we shouldn't. To facilitate this I added an (depth : int) to the Thunk to keep track.