Ruby implementation of xcproj functionality

see #199
This expects an absolute path, otherwise the following assertion is hit:

```
2014-10-18 12:33:59.642 ruby[93754:910280] [MT] DVTAssertions: ASSERTION FAILURE in /SourceCache/IDEXcode3ProjectSupport/IDEXcode3ProjectSupport-6263/Xcode3Core/LegacyProjects/Frameworks/DevToolsCore/DevToolsCore/RuntimeSupport/SDKs/XCSDKPackage.m:202
Details:  Assertion failed: [basePath isAbsolutePath]
Object:   <XCSDKPackage>
Method:   +sdkPackageForNameOrPath:withBasePath:forceCreate:
Thread:   <NSThread: 0x7fc1c422e7a0>{number = 1, name = main}
Hints: None
Backtrace:
  0  0x00000001097fbf9a -[DVTAssertionHandler handleFailureInMethod:object:fileName:lineNumber:assertionSignature:messageFormat:arguments:] (in DVTFoundation)
  1  0x00000001097fb9ef _DVTAssertionHandler (in DVTFoundation)
  2  0x00000001097fbcde _DVTAssertionFailureHandler (in DVTFoundation)
  3  0x00000001097fbc40 _DVTAssertionFailureHandler (in DVTFoundation)
  4  0x000000010b29d8c7 +[XCSDKPackage sdkPackageForNameOrPath:withBasePath:forceCreate:] (in DevToolsCore)
  5  0x000000010b15b32d -[PBXTarget createMacroExpansionScopeWithBuildParameters:] (in DevToolsCore)
  6  0x000000010b15cc07 -[PBXTarget cachedMacroExpansionScopeForBuildParameters:] (in DevToolsCore)
  7  0x000000010b17199f -[PBXTarget expandedValueForString:forBuildParameters:] (in DevToolsCore)
  8  0x000000010b1e8c0b -[PBXNativeTarget fullProductNameForConfigurationNamed:] (in DevToolsCore)
  9  0x000000010b16adb9 -[PBXTarget fullProductName] (in DevToolsCore)
 10  0x000000010b12ae97 -[PBXReference setProducingTarget:] (in DevToolsCore)
 11  0x000000010b16f4e3 -[PBXTarget awakeFromPListUnarchiver:] (in DevToolsCore)
 12  0x000000010b1e99b8 -[PBXNativeTarget awakeFromPListUnarchiver:] (in DevToolsCore)
 13  0x00007fff92fc00d5 -[NSArray makeObjectsPerformSelector:withObject:] (in CoreFoundation)
 14  0x000000010b1419b5 -[PBXPListUnarchiver decodeRootObject] (in DevToolsCore)
 15  0x000000010b10c419 +[PBXProject projectWithFile:errorHandler:readOnly:] (in DevToolsCore)
 16  0x000000010b133e77 -[PBXFileReference loadedContainer] (in DevToolsCore)
 17  0x000000010b207f3f -[PBXContainerItemProxy remoteContainer] (in DevToolsCore)
 18  0x000000010b20800f -[PBXContainerItemProxy remoteContainerItem] (in DevToolsCore)
 19  0x000000010b20ad51 -[PBXReferenceProxy sourceTree] (in DevToolsCore)
 20  0x000000010b12a537 -[PBXReference addNotifications] (in DevToolsCore)
 21  0x000000010b130e11 -[PBXReference awakeFromPListUnarchiver:] (in DevToolsCore)
 22  0x000000010b20bd3b -[PBXReferenceProxy awakeFromPListUnarchiver:] (in DevToolsCore)
 23  0x00007fff92fbffd6 -[NSArray makeObjectsPerformSelector:withObject:] (in CoreFoundation)
 24  0x000000010b1419b5 -[PBXPListUnarchiver decodeRootObject] (in DevToolsCore)
 25  0x000000010b10c419 +[PBXProject projectWithFile:errorHandler:readOnly:] (in DevToolsCore)
 26  0x000000010b10d30d +[PBXProject projectWithFile:errorHandler:] (in DevToolsCore)
 27  0x00007fff8d9a2f44 ffi_call_unix64 (in libffi.dylib)
 28  0x00007fff569dff10
fish: Job 1, 'irb -I lib/xcodeproj -r plist_helper' terminated by signal SIGABRT (Abort)
```