In recent years, the need for computation-intensive applications in mobile networks requiring more storage, powerful processors, and real-time responses has risen substantially. Vehicular networks play an important role in this ecosystem, as they must support multiple services, such as traffic monitoring or sharing of data involving different aspects of the vehicular traffic. Moreover, new resource-hungry applications have been envisaged, such as autonomous driving or in-cruise entertainment, hence making the demand for computation and storage resources one of the most important challenges in vehicular networks. In this context, Mobile Edge Computing (MEC) has become the key technology to handle these problems by providing cloud-like capabilities at the edge of mobile networks to support delay-sensitive and computation-intensive tasks. In the meantime, researchers have envisaged use of onboard vehicle resources to extend the computing capabilities of MEC systems. This paper presents a comprehensive review of the most recent works related to MEC-assisted vehicular networks, as well as vehicle-assisted MEC systems. We illustrate the MEC system architecture and discuss its deployment in vehicular environments, as well as the key technologies to realize this integration. After that, we review the recent literature by identifying three different areas, i.e.: (i) MEC providing additional resources to vehicles (e.g., for task offloading); (ii) MEC enabling innovative vehicular applications (e.g., platooning), and (iii) vehicular networks providing additional resources to MEC systems. Finally, we discuss open challenges and future research directions, addressing the possible interplays between MEC systems and vehicular networks.