Use ADT pattern

Using the material read from "Practical Design Patterns in C", available
at bit.ly/12hVegj.

There is some polishing to be done.