Implement event topic code generation (#510)

* [env] remove unnecessary copy of no longer used

* [env, lang] make crates compile again under newest Rust nightly

* [env] on-chain: enhance ScopedBuffer

Add append_encoded and take_appended methods.

* [env] remove old Topics trait

* [env] add new Topics infrastructure

* [env] implement new Topics infrastructure for on/off chain environments

* [env] remove dummy event

* [env] make env::topics::state mod externally accessible

It stays hidden in docs.

* [lang/codegen] generate proper Topics impls for ink! events

* [env] apply rustfmt

* [lang/codegen] fix codegen for events without topics

* [lang/macro] fix UI test

* [env] off-chain: clean-up slightly

* [examples] ERC-20: improve tests for event topics

* [env] remove commented-out line

* [lang/codegen] include event signature into topics

This is the same as it is done for non-anonymous Solidity events.
The signature of an ink! event is: ContractName::EventName.
E.g. for ERC-20's Transfer event it is: Erc20::Transfer

* [examples] ERC-20: adjust test for changes with event topics

* [lang/ir] add support for anonymous events

* [lang/codegen] add codegen for anonymous events

* [lang/ir] apply rustfmt

* [lang/macro] comment out failing unit test

Fails due to rustc version mismatch and some recent error display change.

* [examples] apply rustfmt
16 jobs for master in 4 minutes and 5 seconds (queued for 4 seconds)