Add abstraction support for HAL, part of the desk API

http://stateless.co/hal_specification.html