Narrowing-Driven Partial Evaluation of Functional Logic Programs