use Promise.cast to determine returned value
optimize middleware invocation using Promise.try()
update changelog
releasing v0.3.2