v2.4

- [x] Refactor API
    - Change endpoint locations to be more logical/clear (e.g. `GET /api/users/:user/profile`, `POST /api/account/passwordchange`)
    - Use `POST` for endpoints which require passwords (e.g. `POST /api/login`)
- [x] Refactor database to use the `mysql` module instead of `mysql-libmysqlclient`
    - `mysql` is written in JS, thus it doesn't require the `libmysqlclient-dev` system package
    - Refactored database to be asynchronous - should improve performance
    - All queries to the database are abstracted through database.js, which should make future changes and additions smoother (since the queries aren't spread out across files)
- [x] Instead of caching the entire channel library in RAM, media additions are queried to the channel library in the database - should reduce memory usage
- [x] Add `defer` attribute to the API `<script>` tags in channel.html - should improve load time
- [x] Revisit the ban system
    - Ensure that IP bans work as intended
    - Check global rank as well as channel rank to prevent IP banning site admins
- [x] Address some issues with IP masking for non-siteadmins