gce api refactoring/cleanup/changes pre compute commit

Turns out that while implementing the compute abstraction I made several refactorings and some changes that were required/made more sense.

The pr is about separating those from the compute pr to simplify reviewing.

Some refactorings and cleanup, namely:
- Moved all relevant null checks into Resource
- Made create firewall use FirewallOptions instead of a Firewall obj
- Made InstanceTemplate.NetworkInterface use more common names such as public/private IP
- Consolidated a lot of the HttpRequests in the expect tests to allow for reuse (in compute)