Plugin manager

Plugin manager for the new plugin structure

 - Install
  - From Rubygems
    - Latest
     - Specific version
  - From gem file

 - List installed plugins
   - All
   - Specific name
   - Specific group

 - Uninstall a plugin

 - Update
   - Single plugin to latest version
   - Single plugin to specific version
   - All to latest version
line 24-58 can be probably refactored to something like:
```ruby
    specs = matching_specs(@gem).select{|spec| spec.metadata['logstash_plugin'] == 'true'}.select{|spec| @group ? @group == spec.metadata['logstash_group'] : true}
    if specs.empty?
      $stderr.puts("No plugins found.")
      exit(99)
    end
    specs.each {|spec| puts("#{spec.name} (#{spec.version})"}


  # I am not sure why we construct an intermediate hash here, was it intended for dedupping on multiple specs for same name?
  # I kept that same logic but if unnecessary than we can remove the hash construction with inject
  def matching_specs(name)
    req = Gem::Requirement.default
    re = name ? /#{name}/i : //
    specs = Gem::Specification.find_all{|spec| spec.name =~ re && req =~ spec.version}
    specs.inject({}){|result, spec| result[spec.name_tuple] = spec; result}.values
  end
```