In TextMate these are called snippets and they can easily be assigned a tab completion shortcut;
Select Bundles
» Edit Bundles
… in the TextMate 2 menu.
Select the bundle you want to add a snippet to, e.g. HTML. Press Cmd-N to create a new bundle item, and select Snippet.
Select Menu Actions
Press Command + N to create a new item, select snippet.
In the text area copy and paste your template.
On the drawer there's a field for "Tab Trigger", enter "html" there.

- Save.
Now when you type "html" and press tab, your snippet will be inserted.
More info about creating a snippet.
Note: I've added "$0" in between your body tags. This is a tab stop and your cursor would appear at the $0. You can read more about advanced Snippet features here.
In My Humble Opinion;
html
doesn't tab complete already because there's no good way to anticipate what you would want in your html template.
Sure, Emmet (as @bitten suggests in his answer) gives you something, but html:5
does too much; HTML5 does not mandate a html
, head
, or body
tag. See this Stack post about HTML5's optional tags. Please see bitten's comment for some warranted concerns with this approach.
That said, I do use Emmet and it is worth investigating.
As for just inserting the doctype for HTML5 in TextMate, just type doctype
and Tab.