Split recipe and available ingredients into separate classes, so that we can have min/max values for recipe ingredients but only a strict amount actually available. We can no longer use the nice set functions to find if the values match each other, but it means we can specialize the two classes so that they don't need as much overlap.