reduces number of db queries in cart validations

Queries don't work the way I thought they work, unfortunately.

This PR reduces the query count of cart#validate_items to O(1) and reduces the query count of cart#validate_dates_and_items by about half (though this is still O(n) queries, mostly due to a faulty num_available method).
Just a sanity check, but all these validation units return an array of errors, right? Will the `<<` operator extend the errors array (i.e. merge the two arrays), or append the return array of errors to it?