make __list use opaque pointers

Redesign - __list should completely hide its internals
from the user interface!

Refactor all test cases
bring coverage back up from 99% to 100%