#Python 2 + NumPy, 122 bytes

I admit it. I worked ahead.

<!-- language-all: lang-python -->

	import numpy
	def f(m):w=len(m);print sum([list(m[::-1,:].diagonal(i)[::(i+w+1)%2*-2+1])for i in range(-w,w+len(m[0]))],[])

Takes a numpy array as input. Outputs a list.

[**Try it online**][1]

###Explanation:

	def f(m):
		w=len(m)	# the height of the matrix, (at one point I thought it was the width)
		# get the diagonals of the reversed matrix. Reverse them if odd by mapping odd to -1
		d=[list(m[::-1,:].diagonal(i)[::(i+w+1)%2*-2+1])for i in range(-w,w+len(m[0]))]
				# w+len(m[0]) accounts for the width of the matrix. Works if it's too large.
		print sum(d,[]) # join the lists

A lambda is the same length:

	import numpy
	lambda m:sum([list(m[::-1,:].diagonal(i)[::(i+len(m)+1)%2*-2+1])for i in range(-len(m),len(m)+len(m[0]))],[])


 [1]: http://ideone.com/okHH7F