function Set() {
    this.table   = {};
    this.objects = [];
  }
A collection of unique elements.

@private
@constructor

@examples
var set  = new Set(),
    obj1 = {},
    obj2 = {},
    fn1 = function fn1() {},
    fn2 = function fn2() {};

set.add('foo')            // => true
set.add('foo')            // => false
set.add(1)                // => true
set.add(1)                // => false
set.add('1')              // => true
set.add('1')              // => false
set.add(obj1)             // => true
set.add(obj1)             // => false
set.add(obj2)             // => true
set.add(fn1)              // => true
set.add(fn2)              // => true
set.add(fn2)              // => false
set.contains('__proto__') // => false
set.add('__proto__')      // => true
set.add('__proto__')      // => false
set.contains('add')       // => false
set.add('add')            // => true
set.add('add')            // => false
set.contains(undefined)   // => false
set.add(undefined)        // => true
set.contains(undefined)   // => true
set.contains('undefined') // => false
set.add('undefined')      // => true
set.contains('undefined') // => true
set.contains(NaN)         // => false
set.add(NaN)              // => true
set.contains(NaN)         // => true
set.contains('NaN')       // => false
set.add('NaN')            // => true
set.contains('NaN')       // => true
set.contains('@foo')      // => false
set.add('@foo')           // => true
set.contains('@foo')      // => true