LIL: abstract interfaces and supporting concrete data-structures in Common Lisp