Sinon can't handle __defineGetter__ so work around it
Clean up events considerably by using js-signals