Separate the btree header from the node (which may be Internal or Leaf)

Mainly this removes a common type outside a functor definition, so we
don't have multiple incompatible instances of this common type being
created on functor application.

Signed-off-by: David Scott <dave.scott@eu.citrix.com>