Co-design of Multiprocessor Embedded Systems: an Heuristic Multi-Level Partitioning Methodology