tests compress with empty selectors
tests compress with empty data
fixes count includes
removes unnecessary include of <list>
adds basic count test
adds count with starting value test
fixes count recursive call with start
tests count with negative step
adds count test with step >1
builds count test
adds basic cycle test
fixes include guards in cycle
cycle iter inherits from std::iterator
adds cycle iter ==
adds cycle iter postfix ++
makes cycle iter assignable
cycle iterators actually compare

It turns out there actually is a case where begin() and end() compare
equal, and thats a cycle over an empty list.  This is the same behavior
as pythons cycle([]) which raises stop iteration right away
Removes placement new in favor of assignment

I'm dont with that idea.  It felt like dark magic to begin with
makes sure cycle binds and moves correctly
makes sure cycle doesn't copy or move elements