{{alias}}( obj, [options,] transform, done )
    Maps keys from one object to a new object having the same values.

    When invoked, `transform` is provided a maximum of four arguments:

    - `key`: object key
    - `value`: object value corresponding to `key`
    - `obj`: the input object
    - `next`: a callback to be invoked after processing an object `key`

    The actual number of provided arguments depends on function length. If
    `transform` accepts two arguments, `transform` is provided:

    - `key`
    - `next`

    If `transform` accepts three arguments, `transform` is provided:

    - `key`
    - `value`
    - `next`

    For every other `transform` signature, `transform` is provided all four
    arguments.

    The `next` callback accepts two arguments:

    - `error`: error argument
    - `key`: transformed key

    If a `transform` function calls the `next` callback with a truthy `error`
    argument, the function suspends execution and immediately calls the `done`
    callback for subsequent `error` handling.

    The key returned by a transform function should be a value which can be
    serialized as an object key.

    Execution is *not* guaranteed to be asynchronous. To guarantee asynchrony,
    wrap the `done` callback in a function which either executes at the end of
    the current stack (e.g., `nextTick`) or during a subsequent turn of the
    event loop (e.g., `setImmediate`, `setTimeout`).

    The function only maps own properties. Hence, the function does not map
    inherited properties.

    The function shallow copies key values.

    Key iteration and insertion order are *not* guaranteed.

    Parameters
    ----------
    obj: Object
        Source object.

    options: Object (optional)
        Function options.

    options.limit: integer (optional)
        Maximum number of pending invocations. Default: Infinity.

    options.series: boolean (optional)
        Boolean indicating whether to process each property sequentially.
        Default: false.

    options.thisArg: any (optional)
        Execution context.

    transform: Function
        Transform function. Returned values specify the keys of the output
        object.

    done: Function
        A callback invoked either upon processing all own properties or upon
        encountering an error.

    Examples
    --------
    // Basic usage:
    > function transform( key, value, next ) {
    ...     setTimeout( onTimeout, value );
    ...     function onTimeout() {
    ...         next( null, key+':'+value );
    ...     }
    ... };
    > function done( error, out ) {
    ...     if ( error ) {
    ...         throw error;
    ...     }
    ...     console.log( out );
    ... };
    > var obj = { 'a': 1, 'b': 2 };
    > {{alias}}( obj, transform, done )
    { 'a:1': 1, 'b:2': 2 }

    // Limit number of concurrent invocations:
    > function transform( key, value, next ) {
    ...     setTimeout( onTimeout, value );
    ...     function onTimeout() {
    ...         next( null, key+':'+value );
    ...     }
    ... };
    > function done( error, out ) {
    ...     if ( error ) {
    ...         throw error;
    ...     }
    ...     console.log( out );
    ... };
    > var opts = { 'limit': 2 };
    > var obj = { 'a': 1, 'b': 2, 'c': 3 };
    > {{alias}}( obj, opts, transform, done )
    { 'a:1': 1, 'b:2': 2, 'c:3': 3 }

    // Process sequentially:
    > function transform( key, value, next ) {
    ...     setTimeout( onTimeout, value );
    ...     function onTimeout() {
    ...         next( null, key+':'+value );
    ...     }
    ... };
    > function done( error, out ) {
    ...     if ( error ) {
    ...         throw error;
    ...     }
    ...     console.log( out );
    ... };
    > var opts = { 'series': true };
    > var obj = { 'a': 1, 'b': 2, 'c': 3 };
    > {{alias}}( obj, opts, transform, done )
    { 'a:1': 1, 'b:2': 2, 'c:3': 3 }


{{alias}}.factory( [options,] transform )
    Returns a function which maps keys from one object to a new object having
    the same values.

    Parameters
    ----------
    options: Object (optional)
        Function options.

    options.limit: integer (optional)
        Maximum number of pending invocations. Default: Infinity.

    options.series: boolean (optional)
        Boolean indicating whether to process each property sequentially.
        Default: false.

    options.thisArg: any (optional)
        Execution context.

    transform: Function
        Transform function. Returned values specify the keys of the output
        object.

    Returns
    -------
    out: Function
        A function which maps keys from one object to a new object having the
        same values.

    Examples
    --------
    > function transform( key, value, next ) {
    ...     setTimeout( onTimeout, value );
    ...     function onTimeout() {
    ...         next( null, key+':'+value );
    ...     }
    ... };
    > var opts = { 'series': true };
    > var f = {{alias}}.factory( opts, transform );
    > function done( error, out ) {
    ...     if ( error ) {
    ...         throw error;
    ...     }
    ...     console.log( out );
    ... };
    > var obj = { 'a': 1, 'b': 2, 'c': 3 };
    > f( obj, done )
    { 'a:1': 1, 'b:2': 2, 'c:3': 3 }
    > obj = { 'beep': 'boop' };
    > f( obj, done )
    { 'beep:boop': 'beep' }

    See Also
    --------