Remove the mutable _layer from Icon

Instead, make the interface more factory-like with a render() function whose
job it is to generate a new layer on demand. This way, icons can be shared
and the code's behavior is less surprising regarding layer destruction.
Whitespace