Hopefully this one provides intuition:

```javascript
encode('&amp;') == '&amp;amp;' // whoops!

encode(decode('&amp;') == '&amp;' // yay!
```

As mentioned in my 1st comment about the discrepancy between `setAttr` and `cheerio.load`, attribute values could come in encoded or not, so we're required to cater reasonably for both scenarios.  See `lib/api/attributes.js` for more details.