filthy-rich 1.0.0

Tiny, ergonomic Discord Rich Presence library for your Rust apps.
Documentation
### v1.0.0

Finally, a stabilized API for `filthy-rich`! (work-in-progress still)

New features:

- Added a new `ActivitySpec` type which basically replaces the current architecture of a mutable `Activity` to a post-built, immutable object which can be sent around.
- Added `Activity::empty_spec` which gives an empty but usable `ActivitySpec` (basically executes `ActivitySpec::default` internally).
- `ActivityResponseData` now includes an `ActivityPayload` object (flattened internally) instance for you to directly see which activity details were sent.
- Completed the `ReadyData` struct with these changes:
  1. New fields in `ReadyData`:
    - `v` - RPC version (`u8`)
    - `config` - server configuration (a new `ServerConfigurationData` object)
  2. The inner `user` field (with type `DiscordUser`) now has the complete specification of struct fields documented in the official Discord RPC documentation.

Changes:

- `ActivityBuilder::build` now returns `Result<ActivitySpec, ActivitySpecBuildError>` with all of its niceties (guardrails for you to bring your Rich Presence to life with safety).
- All of the asset keys/values/URLs which can be passed through the builder functions are now `None`-filtered.
- `PresenceRunner::new` now accepts any type of value for `client_id` as long as it implements `Into<String>`.
- `ActivityResponseData` now only gives out borrowed read-only data through functions (e.g. `ActivityResponseData::name` now returns `Option<&str>`).
- The change above also has been done to `ReadyData`.
- Removed unused `derive` macros from `Activity` since its now just a placeholder struct for accessing `ActivityBuilder` with no values attached to it.
- A lot of improvements to the documentation for various items in the library!

Bug fixes:

- Fixed a fatal bug in ping-pong logic which led to the sending of frames with `PING` and not `PONG` in response to `PING`.

Internal changes:

- Added an idiomatic `Opcode` enum and bettered code quality for matching opcodes in the `socket.read_frame()` loop inside of `PresenceRunner`.
- Removed the use of `Arc` from the inner `readhalf` and `writehalf` fields of `DiscordSock` since the main loop doesn't cross thread boundaries.
- Added a new `DisconnectReason::OldRelicComputer` error.
- `ActivityPayload`, `TimestampPayload`, `ButtonPayload` and `AssetsPayload` are all public structs now. Their fields can be accessed using functions which point to borrowed data.
- The `types` modules is now separated into many other modules internally.
- Optimized some reusable syntax for `PresenceRunner` with macros for a better developer experience.
- Removed the `acquire!()` macro from `DiscordSock`.