Change API: use {min,max}Opt to implement min/max (Functor-based)

This allows us to control more finely when we throw an exception
Implement count for BlitzView{C,VV}
Add tests for count