Support #FFF, FFF hex string formats; outError instead of NSAssert

@kconner @prachigauriar please review
This could all be done quite a lot more efficiently by just checking the length of the string, and if it’s not 6/7, scanning the hex int, pulling it apart component-wise, and then doing a little math:

    // Get each hexadecimal digit from a number whose hex representation is of the form 0xRGB
    unsigned r = (value & 0xf00) >> 8;
    unsigned g = (value & 0x0f0) >> 4;
    unsigned b = (value & 0x00f) >> 0;
    
    // Construct a new number whose hex representation is of the form 0xRRGGBB
    unsigned newValue = (r << 20) + (r << 16) + (g << 12) + (g << 8) + (b << 4) + (b << 0);