Make props observable

@inner
@param {Object} ctx the component instance context
@return {Observer} the observer
function makePropsObservable(ctx) {
    let props = ctx.$rawProps;
    if (typeof props === 'function') {
        props = ctx.$rawProps = props();
    }

    if (!props) {
        return;
    }

    let observer = new Observer(
        ctx,
        ctx[propDataKey] || /* istanbul ignore next */ {},
        null,
        true
    );
    let propsObj = {};

    Object.keys(props).reduce((last, item) => {
        last[item] = true;
        return last;
    }, propsObj);
    Object.defineProperties(ctx, proxyObject(observer, propsObj));

    return observer;
}