def []( *args )
      case( args.size )
      when 3 then get( *args )
      when 2 then get( args[0], nil, args[1] )
      when 1 then
        get( *split_key(args[0]) )
      else
        raise ArgumentError, 
         "wrong number of arguments (#{args.size} for 1..3)"
      end
    end
def []( *args )
      case( args.size )
      when 3 then get( *args )
      when 2 then get( args[0], nil, args[1] )
      when 1 then
        get( *split_key(args[0]) )
      else
        raise ArgumentError, 
         "wrong number of arguments (#{args.size} for 1..3)"
      end
    end
@overload []( section, subsection = nil, key )
  @param section [String]
  @param subsection [String, nil]
  @param key [String]
  @return value

 @overload []( qualified_key )
  @param qualified_key [String] the fully-qualified key, seperated by dots
  @return value