Okay, I'll try here.
Firstly Sam's opinion is considered the normal way to "do" micro-services, but there are trade-offs.
So:
Choreography means the actors act independently but according to a shared set of instructions. This is as opposed to orchestration where there is a central conductor that tells the players what to do and when to do it.
Orchestration is commonly associated with ESB's which hold a lot of the business logic (think scripts and choices), and distribute work to the services.
Choreography is more commonly associated with event-driven systems, where services broadcast events to the world, and interested parties act on those events independently.
Dumb middleware implies that the middleware does not actively react to the content of the messages it transports. It routes "stuff" from A to B based on the address on the envelope. Most messaging middleware is dumb in this respect, though there is often a degree of intelligence added to provide delivery guarantees e.g. exactly-once. This is, arguably, not intelligence per se, but still is, in my opinion, a bit too smart due to transactional concerns, and failure handling semantics, but lets not go there just yet. Trust me when I say that architects argue about this stuff all the time, and Sam falls on the side of light and truth here, if not convenience and simplicity.
If you have dumb middleware, then micro-services absolutely have to be smart end-points, otherwise you've got a brittle (tends to break easily) system of the worst kind. How much smarts depends on how you want to deal with overload and failure. Have a look at all the goodies used by Netflix to add these smarts to micro-services in a reusable way e.g. Hystrix.
No. As much as middleware should not be too clever, it shouldn't be stupid. Kafka, ZeroMQ and so on are highly sophisticated sub-systems when you want to do event-driven systems correctly. That doesn't mean you have to use them, but they have some useful features. Most large-scale systems do both. Synchronous stuff is done using http request/response. Asynchronous stuff uses messaging. Messaging can be centralised (Kafka) or distributed (local ZeroMQ), but the centralised ones can easily insulate you from service failure/recovery.