utf8 is MySQL's old, flawed implementation of UTF-8, which is becoming obsolete.
utf8mb4 is what they have named their fixed UTF-8 implementation, and that is what you should use now.
In their defective version, only characters from the first 64k character plane—the basic multilingual plane—work, with other characters being considered invalid. The code point values in this plane—0 to 65535 (some of which are reserved for special purposes)—can be represented by UTF-8 multibyte encodings up to 3 bytes, and the first version of MySQL's UTF-8 arbitrarily decided to set this as a limit. At no point was this limitation a correct interpretation of the UTF-8 rules, as at no point was UTF-8 defined as allowing only up to 3 bytes per character. In fact, the earliest definitions of UTF-8 defined it as having up to 6 bytes (since revised to 4). The original version of MySQL was always arbitrarily crippled.
At the time MySQL released it, the consequences of this limitation were not too serious because most Unicode characters were in this first plane. Since then, more and more newly defined character ranges have been added to Unicode with values outside this first plane. Unicode itself defines 17 planes, although so far only 7 of them are in use.
In an effort to avoid breaking the old code by making specific assumptions, MySQL kept the broken implementation and called the new, corrected version utf8mb4. This has led to some confusion, as the name has been misinterpreted as some kind of extension of UTF-8 or an alternative form of UTF-8, rather than MySQL's implementation of true UTF-8.
Future versions of MySQL will eventually phase out the old version, and for now, it can be considered obsolete. In the foreseeable future, you should use utf8mb4 to ensure correct UTF-8 encoding. After a sufficient amount of time, the current utf8 will be removed, and at a later date, utf8 will be increased again, this time referring to the corrected version, but utf8mb4 will continue to refer unambiguously to the corrected version.