Have you looked at the tooling in Genera or other lisp machines?