Add .push_when method to allow filtering of when to push objects

updated auto_push to use it, and added basic criteria to order decorator