Remove unused code

According to the coverage report, this code isn't called in any of the tests. I'm placing faith in my unit tests and removing it. All of the tests, including the new one being added, still pass without it.
Raise TypeError for invalid query sets

`QuerySet.count()` will now raise `TypeError` when there is no cursor associated with the `QuerySet` instance. `QuerySet.__len__()` will catch the exception and safely return `0`.
Add better exception message

By including information about the class associated with the `QuerySet` instance in the `IndexError` message when slicing a `QuerySet`, it becomes a lot easier to know what went wrong.