After pulling out what limited hair I have left, I figured it out.
Early in my experimentation I had defined a router in my urls.py that was routing my intended API view URL to a viewset class I had defined. I did not have the permissions property on it.
So the answer to my original questions are:
1. No, it is not necessary to set default permission classes in settings.py in order to do individual permission settings on class based views.
2. Yes, I think it would be useful to at least mention in tutorial part 4 that it is is possible to do a class-wide permission or authentication setting. It is in the details of Permissions and Authentication but still might make the tutorial more useful.
The mistake in my troubleshooting was that everything was working as expected and declared in the tutorial. I needed to look outside the problem.