Add Piazza abstraction on top of PiazzaRPC

* `Piazza` -> `PiazzaRPC`; `Piazza` is now an abstraction on top of it
    * `Piazza` has several additional methods to `PiazzaRPC` which are not tied directly to one of Piazza's RPC endpoints but instead use them in combination (as was the whole point of the additional abstraction =D )
* Added `Network`; `Piazza` instances are not tied to a specific network, instead can create `Network`s after authentication
* `get_user_profile` is a method of `Piazza` as it is not tied to a specific network

Resolves #14