Summer ☀️

Results 8 issues of Summer ☀️

Some lists zero-pad IP addresses, i.e. `1.2.3.4` will be listed as `001.002.003.004`. The deduplication does not account for this.

[http://malc0de.com/bl/IP_Blacklist.txt](http://malc0de.com/bl/IP_Blacklist.txt) blocks the `Python-urllib/*` user agent. The resulting CloudFlare 403 error page contains the client's IP address, causing it to be automatically included in `badactors.txt`.

With this change, you will be able to pass in the `class` attribute either as a string: ``` icon('fas', 'flag', class: 'strong underline') ``` …or as an array: ``` icon('fas',...

Allows passing nested parameters, e.g. `a[b][c]=123`

Basically just reopening #537, but this time with tests (hopefully) passing