Refactored Dataset.reindex and generalized xray.align

The new xray.align can handle an arbitrary number of arguments, as well as
four different join options copied from `pandas.DataFrame.align` ('inner',
'outer', 'left' and 'right').

This gives us most of what we need to flip a switch and start automatically
aligning dataset arrays when they are used in mathematical operations. We'll
need to decide if we want to default to outer joins (like pandas) or inner
joins (which are less likely to blow up due to lack of memory or CPU).