* Refactor event type decoding hand declartion
Fixes#196, #181, #28
## Dyanmic sized types
Before this change, the event decoder assume all the event types
have fixed sizes. Some counterexamples are: Hashes, AuthorityList.
In this change, instead of decoding by skipping the fixed-length bytes,
we introduce `type_segmenter` registry which decodes the raw event
bytes with the actual scale codec. So variable length types can be
handled correctly.
## New attribute for pallet type definition
In the past, trait associated type is the only way to add types to
the EventsDecoder implementation of a pallet. But in reality it's
common that the events in a pallet references some types not defined
in the trait associated types. Some examples are: `IdentificationTuple`
and `SessionIndex` in Session pallet.
In this change, we introduce more attributes to add the types:
```rust
#[module]
trait Pallet: System {
#![event_type(SomeType)]
#![event_alias(TypeNameAlias = SomeType)]
#![event_alias(SomeOtherAlias = TypeWithAssociatedTypes<T>)]
}
```
## Tested
Compile with `nightly-2020-10-01`; smoke test to sync a full
Phala bockchain.
* Format code
* Make rustfmt::skip an outer attribute
* Ignore the sample code
* Alias the event segmenter closure
* Copy AuthorityList from sp_finality_grandpa
* Remove the unused static event type size
* Make segmenter as a trait, resue grandpa::Public
* Wrap PhantomData in struct TypeMarker