Create a T9 keyboard This question asks for a T9 dictionary matching functionality which is a very interesting problem. But T9 has another way of typing and that is typing character-by-character. You would NOT need a dictionary to implement this keyboard. 

Here is key-map of a T9 keyboard if you forgot:

+-------+-------+-------+
|   1   |   2   |   3   |
|  .?!  |  ABC  |  DEF  |
+-------+-------+-------+
|   4   |   5   |   6   |
|  GHI  |  JKL  |  MNO  |
+-------+-------+-------+
|   7   |   8   |   9   |
| PQRS  |  TUV  |  WXYZ |
+-------+-------+-------+
|   *   |   0   |   #   |
|   ←   | SPACE |   →   |
+-------+-------+-------+


How T9 works

To type a character with T9, you need to press number key representing that character n times. n is order of that character written on that key. Numbers are the last character you can type for each key. For example, to type B I press 2 two times, or to type 5 I press 5 four times. To finish typing this character I press #. * is simply backspace. In our version of keyboard there is no capitalization.

Input and output examples:

8#99999#055#33#999#22#666#2#777#3# → T9 KEYBOARD


Explanation:


8 selects T and # moves to next character 
99999 select last character of 9 key which is 9 and # moves to next charachter
0 inserts a space
33 selects second character of  3 key which is K and # moves to next character 
And so on...


Rules

Your function or program should accept a string representing T9 keypresses. Output is the resulting text from those keypresses, as outlined above. 

This is basic code golf, so the winner is shortest in bytes, and standard rules/loopholes apply.
CJam, 109 94 bytes (2nd bonus)
A very naive and long solution
q'#/);{__'*-:A-,_g{){;}*A_}*;'0/{_,g{)~&quot;.?~1&quot;a'[,65&gt;292994 5b{/(X):X+\s}%+1:Xm&gt;=\,=}*}%S*1/~}%

This is a full program, although a function will be of the same length.
The input goes into STDIN
Example:
8#99999#055#33#999#***22#666#2#777#3#

Output:
T9 BOARD

Try it online here