Introduce BuxtonList

BuxtonList provides an intelligent linked list. Unlike standard linked
list implementations, it tracks both head and tail, as well as its
own length. This allows for much faster append operations, enabling
the list to remain in its intended order.

A BuxtonList is not initially allocated, rather you use a pointer to
a BuxtonList pointer (double pointer) to initialise. It can be initialised
by appending to a NULL double-pointer. Given that append is just as
fast as prepend, either operation can be used without sacrifice.

BuxtonList also supports automatic freeing of members, which can be done
simply by using the buxton_list_free_all function, or one of the
shorthand attribute definitions (such as _cleanup_list_all)

Signed-off-by: Michael Ikey Doherty <michael.i.doherty@intel.com>