Add caphead pointer to whead.

More type-safe.
take whead pointer instead of raw pointer.
refactor: rename consumer to destination.

To reduce confusion between consumer and CI.
refactor: move destination to separate file
refactor: use "struct" keyword

for lesser confusion.
Merge branch 'refactor_dst'