Something odd is going on.
With the minimal files needed, it built for me under 1.0.5 and 1.6.3
It will not, however build with all the files as exacted from the zip as keyboard.h is missing and the IDE will attempt to compile all the modules under the keybrd directory since it thinks that it is a "library" based on the include file in the sketch.
The IDE build methodology is pretty goofy and wimpy and in some cases does some dumb things or even incorrect things.
In order to let the user write incomplete (bad) code, the IDE will scan the .ino file and attempt to convert it to proper C++ code before it hands the .cpp file off to the compiler.
The main thing it does is insert another include and then insert function prototypes.
It also will scan the users sketch and look for header files that it thinks belong to other arduino "libraries".
By "arduino tradition" arduino "libraries" and their main header file have the same name.
While the IDE does not enforce this, it is something to keep in mind and different versions of the IDE handle the libraries, their headers, and how to deal with header file collisions in arduino "libraries" differently.
Basically if there is a header file collision, you are SOL since the IDE can potentially grab the wrong header and in the newer version of the IDE, the "fix" for header file collisions is guaranteed to not do what, if the "library" directory name is not the same basename as the header file.
The root cause is that IDE depends on an include path that it builds up for the compiler so if there is a collision with a directory earlier in the include path, the header will be fetched from the first directory in the include path vs another directory that the IDE "prefered" for that header that was also added to the include path.
i.e. different parts of the IDE are no in sync with each other over which header file will end up being used by the compiler when there are collisions.
Also keep in mind that the IDE build methodology is so simplistic that it can have issues if you try to create a library that sketches can directly include different headers for different classes.
The IDE assumed a very simplistic system of sketches including only a single header file for a given library.
Go beyond that and you run the risk of issues.
The IDE seems to be seeing your Key.h file down in your keybrd libraries directory since it gave this to the compiler:
What seems odd is that "Key" class is not known.
First thing I'd do is go look at the actual .ccp file down in the tmp directory that is being compiled.
I've seen the IDE make a mess of the user's sketch file by incorrectly changing when it inserts its includes and prototypes when creating the .cpp file from the .ino file.
If that looks OK, then the other thing I'd look for is another header file named "Key.h".
I didn't try build this on a 1.0.6 IDE or one with the Teensy stuff installed but I know that 1.0.6 has the new code that tries to deal with library header file collisions. Paul and I had some heated discussion over how to handle this and I still will say that I believe that the way the IDE is handling this is wrong and under certain conditions is guaranteed to silently create strange issues like the one you are seeing.
I have run into this issue many times as it always gets tripped up with the way I'm doing library regression testing for my own libraries.
It ends up telling the sketch to use one version of the "library" but then compiles and links in another.
So the includes for the sketch are not coming from the "library" that is being built.
And this is what Paul and I were arguing about. I wanted to the IDE to guarantee that his would never happen.
The Arduino IDE answer was that in this specific condition, behavior is undefined. (They punted)
I thought that was unacceptable and believe that while the IDE might not pick the "library" you wanted under certain conditions, it should at least always guarantee that everything is consistent for a given arduino "library".
i.e. the arduino "library" being compiled,built, and linked in is the same library the sketch is using for its header files.
(The real answer is to change the IDE build methodology but that is a much bigger change)
Also, keep in mind that the the IDE will attempt to compile every single .cpp or .c file down in an arduino "library" directory when it thinks that "library" is being used.