Adds support for custom where bounds (#263)

* Adds support for custom where bounds

The user can now specify a custom where bound when using the derive
macros:

- `#[codec(encode_bound(T: Encode))]` for `Encode`
- `#[codec(decode_bound(T: Encode))]` for `Decode`

If nothing is specified (`encode_bound()`) the where bounds will be empty.

* Apply suggestions from code review

* Apply suggestions from code review

Co-authored-by: Gavin Wood <gavin@parity.io>
9 jobs for master in 21 minutes and 41 seconds (queued for 2 seconds)