The limits of lisps synatactic gymnastics? (i sure hope not)



Hi.
I'm trying to create a simple alternative object system for common
lisp. Whilst I admire the power and generality of clos, it's a little
unwieldy for some little things. What I'm looking for is something more
in the model of ruby/javascript/python, where an object is basically a
hash table of properties with very simple accessing syntax. A very
important requirement for me is that setfing an undefined property
defines it, so assignment and property initialisation look the same.
So here's an example of what I would like to be able to do.

>(setf obj (make-object))

>(setf (obj name) "Chuck")

>(obj name)
-> "Chuck"

>(defun make-person (name age)
(let ((obj (make-object)))
(setf (obj name) name)
(setf (obj age) age)
obj))

>(setf jimmy (make-person "jimmy" 74))

>(jimmy age)
-> 74

>(setf (jimmy age) 2)
-> 2

>(jimmy age)
-> 2

Now at this point I'm not even thinking about methods on the object
(that can come later but is not so important, so maybe object is the
wrong word and I should be talking about structures)
My first thought was to have make-object return a closure over a hash
table, which would mean you would have to quote all the accessors
(jimmy 'age). Now this is bearable but not ideal. However there is a
more serious problem, which is the namespace issue. I'd either have to
pass all my objects using the eye-jarring #' macro, or (funcall jimmy
'age). (and oops, this scheme doesn't deal with setfing properties,
just spotted that).
Now, if there were a single namespace and macros were first class
objects (hint hint Paul Graham) I think make-object could return a
macro, that was closed over a hash table, and that returned the
accessor form for the hash table. (or is it impossible to close a macro
over a variable? this hurts my head)
Anyway, I'm stumped. I've reached the limit of my knowledge of lisp,
but I'm sure it's possible (probably using read-macros or generalized
variables or some such esoterica).
If anyone has any ideas I'd be very interested (and if you don't have
any ideas I'm sorry you had to read this torturously long post).

oo oo, ps, avoiding a meta-circular interpreter type solution would be
a bonus :)

Thanks in advance

Robbie

.