Feature/filestorage availabilityzones list (#153)

* sfs: Add support for Availability Zone List

* sfs: Add acceptance tests for Availability zones List

* sfs: Fix review comments
diff --git a/openstack/sharedfilesystems/v2/availabilityzones/results.go b/openstack/sharedfilesystems/v2/availabilityzones/results.go
new file mode 100644
index 0000000..83a76c1
--- /dev/null
+++ b/openstack/sharedfilesystems/v2/availabilityzones/results.go
@@ -0,0 +1,59 @@
+package availabilityzones
+
+import (
+	"encoding/json"
+	"time"
+
+	"github.com/gophercloud/gophercloud"
+	"github.com/gophercloud/gophercloud/pagination"
+)
+
+// AvailabilityZone contains all the information associated with an OpenStack
+// AvailabilityZone.
+type AvailabilityZone struct {
+	// The availability zone ID.
+	ID string `json:"id"`
+	// The name of the availability zone.
+	Name string `json:"name"`
+	// The date and time stamp when the availability zone was created.
+	CreatedAt time.Time `json:"-"`
+	// The date and time stamp when the availability zone was updated.
+	UpdatedAt time.Time `json:"-"`
+}
+
+type commonResult struct {
+	gophercloud.Result
+}
+
+// ListResult contains the response body and error from a List request.
+type AvailabilityZonePage struct {
+	pagination.SinglePageBase
+}
+
+// ExtractAvailabilityZones will get the AvailabilityZone objects out of the shareTypeAccessResult object.
+func ExtractAvailabilityZones(r pagination.Page) ([]AvailabilityZone, error) {
+	var a struct {
+		AvailabilityZone []AvailabilityZone `json:"availability_zones"`
+	}
+	err := (r.(AvailabilityZonePage)).ExtractInto(&a)
+	return a.AvailabilityZone, err
+}
+
+func (r *AvailabilityZone) UnmarshalJSON(b []byte) error {
+	type tmp AvailabilityZone
+	var s struct {
+		tmp
+		CreatedAt gophercloud.JSONRFC3339MilliNoZ `json:"created_at"`
+		UpdatedAt gophercloud.JSONRFC3339MilliNoZ `json:"updated_at"`
+	}
+	err := json.Unmarshal(b, &s)
+	if err != nil {
+		return err
+	}
+	*r = AvailabilityZone(s.tmp)
+
+	r.CreatedAt = time.Time(s.CreatedAt)
+	r.UpdatedAt = time.Time(s.UpdatedAt)
+
+	return nil
+}