Move every boundary check to max_boundary check to avoid unnecessary checks

Since @droazen forced me to change utils::check_boundaries to a version that takes in unsigned ints and doesn't check for the lower boundary, it was only reasonable to go around the code and replace all usages that were wastefully checking for lower boundaries and use the new function. 

Also, since every single use was passing the index past the limit, I changed the function signature to reflect the most common use case.
Don't like this change -- requiring users to pass in the index "one past" the last valid index seems confusing, and is likely to lead to off-by-one errors. Recommend reverting to the previous versions where you pass in the largest/smallest acceptable values.