Use Flush derives and generally update the Flush trait (#269)

* [core] add core/derive crate to add derive macro for Flush

* [core/derive] change license from GPL-3.0 to APACHE-2.0

* [core/derive] implement Flush and AllocateUsing derives based on synstructure

* [core] re-export AllocateUsing and Flush derives from within core

* [core/derive] fix AllocateUsing derive impl

* [core/derive] adjust AllocateUsing tests

* [core/derive] apply cargo fmt

* [core/derive] add test::utils and improve AllocateUsing tests

* [core/derive] add explanation docs

* [core/derive] add doc for a hack

* [core/derive] forbid deriving empty enums for Flush

* [core/derive] update compile tests

* [core] remove derive crate feature

* [core/derive] remove `extern crate ink_core` edition 2015 compat

* [core, examples, lang] update Flush impls

* [core] apply rustfmt

* [core] simplify Flush impl for StashHeader

* [core] remove derive crate feature

* [examples] fix clippy warning about Flush in delegator
14 jobs for master
in 15 minutes and 36 seconds, using 0 compute credits, and was queued for 5 seconds