all basics passing
clean up helper functions
allow pipe and ampersand as boolean ops