Easy: New class FileExtensions

Summary:
To support natively building iOS targets, we need to split
out sources and headers (which are currently mingled together in
the srcs parameter of ios_* targets).

This diff adds a new class FileExtensions which I will use to split
source files from header files. We have similar code in ProjectGenerator
which I'll refactor in the next diff.

Test Plan: Unit test in subsequent diff.
Use new class FileExtensions in ProjectGenerator

Summary:
This is a followup to D1386009, and refactors
ProjectGenerator to use the new class FileExtensions.

Depends On D1386009

Test Plan: Unit test in subsequent diff.
Support per-file compiler flags in AbstractNativeBuildable

Summary:
We'd like to use AbstractNativeBuildable for
iOS targets. iOS supports setting per-file compiler flags,
so this diff adds that support to AbstractNativeBuildable.

Test Plan: Not used in this diff. Unit test in subsequent diff.
Easy: Buck iOS tests: Ensure deps is non-null in tests

Summary:
I'm about to make it so we depend on the 'deps' field of
IosLibrary etc. being non-null. This is always true in production,
but in tests, we manually create the IosLibraryDescription.Arg
value and often leave fields null in tests.

This makes sure the deps field is always non-null in our tests.

Test Plan: ant test
buck for iOS v2: Make Apple binary targets implement AbstractNativeBuildable

Summary:
This is a first step towards making Buck build iOS targets
natively. Building targets doesn't quite work yet (we need to transform
xcconfig settings to clang / ld parameters) but this is a start.

I introduced a new value type, TargetSources. This is necessary
because AbstractNativeBuildable requires the subclass to pass in
certain information (source and header files) to the superclass
constructor.

Since Java requires the call to super() to be the first line in
the subclass constructor, we need to make sure IosLibraryDescription
and related classes wrap up and pass the source, header, and other
required data directly to the subclass constructor.

TargetSources bundles together two existing pieces of data (srcs and
perFileFlags) with two new pieces of data (srcPaths and
headerPaths). These will be passed to the constructor of IosLibrary,
IosBinary, etc.

I also had to make the constructor to ArStep public, since it had
package privacy before.

Depends On D1386196
Depends On D1386184
Depends On D1386032
Depends On D1386009

Test Plan: Unit tests included.
Add a copyright profile for IntelliJ

Test Plan: Create a new java class, verify copyright gets added.
Use a list instead of set to pass resoure directories to aapt.

Summary:
Since the ordering of these resource directories is important (which is why we
topo-sort the android resource rules in the first place).

Test Plan: buck test --all
Fixed the description of build target patterns ending with "...".

Summary: Reported in a comment of #137.