843 ban max

Close #843 
While implementation might be a bit more difficult, I think we should try to heavily rely on defaults here.  For example, if we have default_val default to 0, usage in many cases would be a lot cleaner.  Along with this, the default accessor can just be the object itself. 

Because of the above, I would switch the arguments of the second function (have default_val before accessor) as the interface in my view becomes a lot smoother.