Update Recipe.validate to throw the first exception it encounters instead of reporting an array of errors.
Require a base path when constructing a Recipe; Resolve paths against base path at construction.