add Accumulate component

I've been rewriting this component a few times already, time share it with the rest of the world :)