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.
This is inconsistent -- this version of check_boundaries does not throw if index == max_index, but does throw if it == min_index.