Allow disposing of gridReader before reading all

It seems reasonable that there are cases where you want to avoid reading
the entire result set in a deferred situation.
e.g.
```csharp
using(var gridReader = conn.QueryMultiple(...)){
foreach(var m in gridReader.Read<A>(false)){
if(someCondition) doSomethingWith(m)
else gridReader.Dispose() // cancel the reader.
}
}
```
In the current dapper disposing of the gridReader causes the
`Read<T>(buffered)` enumerator's dispose to throw a null reference
exception as it tries to NextResult() in it's Dispose method. This
allows code like above to work without error.