Use pragma once, instead of header guards

This also results in the cleanup for the TypedList and Visitor headers
which now removes duplication.