code: function processAddress(arr, def) {
      arr = [].concat(arr || []);
      if (!arr.length) {
          arr = [].concat(def || []);
      }
      if (!arr.length) {
          return null;
      }
      var result = [];
      arr.forEach(function(addr) {
          if (typeof addr == 'string') {
              addr = addressparser(addr)[0];
          }
          if (!addr.group) {
              result.push([
                  addr.name || null,
                  null, // FIXME: check the rfc, this should be related to groups
                  (addr.address || '').split('@').shift() || null,
                  (addr.address || '').split('@').pop() || null
              ]);
          } else {
              // Handle group syntax
              result.push([null, null, addr.name || '', null]);
              result = result.concat(processAddress(addr.group) || []);
              result.push([null, null, null, null]);
          }
      });
  
      return result;
  }
docs: Converts an address object to a list of arrays
  [{name: 'User Name', address:'user@example.com'}] -> [['User Name', null, 'user', 'example.com']]
  
  @param {Array} arr An array of address objects
  @param {Array} def default value for empty `arr`
  @return {Array} A list of addresses