Implement Retina assets

Fixes #4325.

Because an image inserted with `content: url()` in CSS cannot be resized anymore (see https://stackoverflow.com/questions/14978807/can-you-apply-a-width-to-a-before-after-pseudo-element-contenturlimage), we have to use `transform: scale(0.5);` to make the images appear correctly. However, due to the scaling, we must add some CSS tweaks to align all icons correctly. This explains the additional CSS tweaks on top of the simple `url()` changes.