ENH: call functions with string and dataset

 - when appropriate, use ds.eval(x) instead of ds[x]
 - raise appropriate errors if no dataset is specified